用python來操作MySQL,首先需要安裝PyMySQL庫(pip install pymysql)。
連接MySQL:
import pymysql connect=pymysql.connect(host='localhost',user='root',password='xxxx',port=3306)
注:此時還未創建數據庫,如已創建數據庫,在連接時需再加上一個參數db。
注:host為指定的連接服務器的地址,設置為'localhost'代表連接到本地的MySQL服務上,user為用戶名,password為密碼,port為指定的端口(默認為3306)。
創建游標:(我們需要用游標來執行各種操作)
cursor=connect.cursor()
關閉游標:
cursor.close()
關閉連接:
connect.close()
執行單條sql語句:
cursor.execute(...)
執行多條sql語句:
cursor.executemany(...)
提交事務:
connect.commit()
回滾事務:
connect.rollback()
在Python中對數據庫進行增刪改等操作使用的是事務處理,因此在執行增刪改SQL語句后,需要提交事務才能在數據庫中完成操作,並且還需添加錯誤判斷,當執行SQL語句失敗后,需要對事務進行回滾。增刪改模板如下:
sql='...'
try: cursor.execute(sql) connect.commit() except: connect.rollback()
創建數據庫:
cursor.execute("CREATE DATABASE db_test DEFAULT CHARACTER SET utf8") #創建名為db_test的數據庫
選擇數據庫:
connect.select_db('db_name')
創建表:
sql='CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL,name VARCHAR(255)\ NOT NULL,age INT NOT NULL,PRIMARY KEY(id))' #創建一個名為students的數據表,分為id,name和age三列,其中id為主鍵 cursor.execute(sql)
插入數據:
id='001' name='Hu' age=5 sql='INSERT INTO students(id,name,age) VALUES (%s,%s,%s)' try: cursor.execute(sql,(id,name,age)) connect.commit() except: connect.rollback()
修改數據:
sql='UPDATE students SET age=%s WHERE name=%s' try: cursor.execute(sql,(4,'Hu')) connect.commit() except: connect.rollback()
更新數據(如果數據存在,則更新數據,如果數據不存在,則插入數據):
data={'id':'002', 'name':'Bo', 'age':11} #為了方便修改數據,把數據以字典形式傳入,這樣就不需要修改sql語句了 table='students' keys=','.join(data.keys()) values=','.join(['%s']*len(data)) sql='INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table,keys=keys,values=values) #相當於INSERT INTO students(id,name,age) VALUES (%s.%s,%s) ON DUPLICATE KEY UPDATE update=','.join(["{key}=%s".format(key=key) for key in data.keys()]) #相當於id=%s,name=%s,age=%s sql=sql+update try: cursor.execute(sql,tuple(data.values())*2) connect.commit() print("Sucessful") except: connect.rollback() print("Failed")
刪除數據:
sql='DELETE FROM xxx WHERE ...' try: cursor.execute(sql) connect.commit() except: connect.rollback()
連接MySQL數據庫+增刪改操作的完整模板如下:
import pymysql connect = pymysql.connect(host='...', # IP地址 port=3306, # 端口號 user='...', # 用戶名 password='...', # 密碼 db='...', # 數據庫名 charset='utf8') # 鏈接字符集 cursor = connect.cursor() # 創建游標 sql='...' try: cursor.execute(sql) # 執行SQL語句 connect.commit() # 提交事務 except Exception as e: connect.rollback() # 如果發生錯誤,則回滾事務 finally: cursor.close() # 關閉游標 connect.close() # 關閉數據庫
查詢數據:
sql='SELECT * FROM xxx WHERE ...' cursor.execute(sql)
獲取查詢結果的條數:
cursor.rowcount
獲取第一條數據:(元組形式)
cursor.fetchone()
獲取所有數據:
cursor.fetchall()
獲取指定數量的數據:
cursor.fetchmany(num)
逐條獲取數據:
results = cursor.fetchall() for row in results: print(row)
fetchall()
會將結果以元組形式全部返回,如果數據量很大,那么占用的開銷會非常高。因此,推薦使用如下方法來逐條讀取數據:
row=cursor.fetchone() while row: print(row) row=cursor.fetchone()
總結來說,執行什么樣的操作要根據SQL語句來定。因此需要學習好SQL的語法。
參考:https://cuiqingcai.com/5578.html
https://cloud.tencent.com/developer/article/1457448