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  )  

 【修改數據】

修改資料庫,最終於被人遺漏的步驟是什麼?   是提交事務操作

  1. 從資料庫連接對象獲取游標
  2. 執行修改SQL的語句
  3. 提交事務
  4. 關閉游標,關閉資料庫連接
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()