Python操作Mysql
【前言】
為什麼要使用Python操作mysql,在做自動化的時候,有時候會由於某種原因,使系統上存在很多臟數據,這就需要每次自動化腳本執行結束時,需要人為去資料庫中清除數據,每次都手動執行過於麻煩,於是這裡就引進Python3 操作mysql資料庫的概念
【環境準備】
1.Python3.8
2.pycharm開發工具
3.安裝Python依賴(通常選擇第三方的連接器)
3.1.選擇官方連接器 pip install mysql-connector-python(mysql的);
安裝完成後,如何驗證,在python中 import mysql.connector 不報錯即可
選擇官方連接器 pip install mariadb(mariadb的);
安裝完成後,如何驗證,在python中 import mariadb不報錯即可
3.2. 第三方連接器 (既支援mysql,也支援mariadb)
mysqlclient Python+C語言實現的
pip intsall mysqlclient 安裝; 如何驗證 import Mysqldb 不報錯即可
PyMysql 純Python語言實現的
pip install pymysqll; 如何驗證 import pymysql
4.mysql庫(如何安裝//www.cnblogs.com/xinhua19/p/12750611.html)
【資料庫查詢】
【建立連接】
程式碼示例 import pymysql pymysql.connect( host='localhost',user='user','password='password',database='database',port=3306 )
from pymysql import connect, Error """使用pymysql連接資料庫""" conn = None # 資料庫的連接對象 try: # 建立連接 conn = connect( host=10.100.12.1, port=3306, user=useradmin, password=123456, database='test_data_1' ) # 獲取游標對象 cursor = conn.cursor() # 執行sql命令(增刪改查) select * from table; # 關閉游標對象 cursor.close() # 關閉資料庫連接 conn.close() """但是我們有時候經常會忘記去關閉資料庫,我們可以通過except finaly去操作,程式碼如下""" except Error as e: print('連接失敗:{}『.format(e)) finally try # 再次關閉連接 conn.close() print('資料庫連接已關閉')
【with語法】
with語法(pymysql 還提供了1個with語法)
自動回收資料庫連接
自動回收游標
1 from pymysql import connect, Error 2 3 """使用pymysql連接資料庫""" 4 5 conn = None # 資料庫的連接對象 6 7 try: 8 # 建立連接 9 conn = connect( 10 host=10.100.12.1, 11 port=3306, 12 user=useradmin, 13 password=123456, 14 database='test_data_1' 15 ) 16 with conn: 17 with conn,cursor() as cursor: 18 sql = 'select * from table limit 1;' 19 # 執行sql 20 cursor.execute(sql) 21 #方法一 獲取全部查詢結果 22 for item in sql: 23 print (item) 24 #方法二 獲取一條數據 25 onedata = cursor.fetchone() 26 print(onedata) 27 # 方法三 獲取全部數據 28 all_data = cursor.fetchall() 29 for item in all_data : 30 print (item) 31 # 方法四 獲取指定數據 32 data_list = cursor.fetchmany(10) 33 for item in data_list : 34 print (item) 35 except Error as e: 36 print('連接失敗:{}『.format(e)) 37
【游標提供的方法】
獲取一條數據
cursor.fetchone()
獲取全部數據
cursor.fetchall()
獲取指定數量的數據
cursor.fetchmany(10)
【結果轉換為字典】
需要添加連接參數cursorclass
1 程式碼示例 2 3 4 import pymysql 5 from pymysql.cursors import DictCursor 6 7 pymysql.connect( 8 host='localhost',user='user','password='password',database='database',port=3306, cursorclass=DictCursor 9 )
【修改數據】
修改資料庫,最終於被人遺漏的步驟是什麼? 是提交事務操作
- 從資料庫連接對象獲取游標
- 執行修改SQL的語句
- 提交事務
- 關閉游標,關閉資料庫連接
from pymysql import connect, Error """使用pymysql連接資料庫""" conn = None # 資料庫的連接對象 try: # 建立連接 conn = connect( host=10.100.12.1, port=3306, user=useradmin, password=123456, database='test_data_1' ) with conn: with conn,cursor() as cursor: sql = 'update 語句;' # 執行sql cursor.execute(sql) # 提交事務 conn.commit() except Error as e: print('連接失敗:{}『.format(e))
【新增數據】
步驟和修改資料庫一樣。都是4個步驟,也都需要提交事務。
這邊不同的是插入單個數據可以寫1個insert into ; 那麼如果想寫多條數據時 該怎麼處理呢,這邊就引入了
【批量插入數據】
cursor.exectemany(sql.args) 參數解釋:sql:需要執行的sql語句,args:需要插入的數據序列(通常用列表/元組表示)
【事務的提交和回滾】
1 程式碼示例 2 3 try 4 cursor.execute(sql1, args) 5 conn.begin() # 開始事務 6 cursor.execute(sql2, args) 7 cursor.execute(sql3, args) 8 cursor.close() 9 conn.commit() 10 except Exception: 11 12 conn.rollback() # 回滾事務
【刪除數據】
刪除數據和 修改數據,新增數據是一樣的,都是四步
程式碼示例 def delete _data(self): """刪除數據""" row_id = 47 sql = "delete from table where id like = %s" with self.conn.cursor() as cursor: cursor.excute(sql,(row_id, )) self.conn.commit()