1. 程式人生 > >3-4 用Python 進行資料庫連線與資料查詢(版本:py3)

3-4 用Python 進行資料庫連線與資料查詢(版本:py3)

PyMySQL

1.安裝PyMySQL包

pip install PyMySQL

#推薦使用conda 來安裝

conda install PyMySQL

2.補充閱讀

請閱讀官方文件中Documentation的User Guide部分,熟悉一個包最直接方法就是閱讀官方文件。

建立名為user的表格以備後續操作

CREATE TABLE `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `email` varchar(255) COLLATE utf8_bin NOT NULL,
    `password` varchar(255) COLLATE utf8_bin NOT NULL,
    PRIMARY KEY (`id`)
) 
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
AUTO_INCREMENT=1 ;

利用Python進行資料庫操作

利用Python進行資料庫操作主要會涉及到三個部分,首先是如何連線資料庫,你需要掌握的是每一個部分的引數如何進行設定,從而正確建立連線;然後是進行資料的新增,最後是資料的呼叫。

連線MySQL資料庫

import pymysql.cursors
#使用pymysql指令來連線資料庫
connection=pymysql.connect(host='',user='',password='',db='',charset='',cursorclass=pymysql.cursors.DictCursor
)
host:要連線的資料庫的IP地址
user:登入的賬戶名,如果登入的是最高許可權賬戶則為root
password:對應的密碼
db:要連線的資料庫,如需要訪問上節課儲存的IRIS資料庫,則輸入'IRIS'
charset:設定編碼格式,如utf8mb4就是一個編碼格式
cursorclass:返回到Python的結果,以什麼方式儲存,如Dict.Cursor是以字典的方式儲存

建立新的資料

try:
    #從資料庫連結中得到cursor的資料結構
    with connection.cursor() as cursor:
    #在之前建立的user表格基礎上,插入新資料,這裡使用了一個預編譯的小技巧,避免每次都要重複寫sql的語句
        sql="INSERT INTO `USERS`(`email`,`password`) VALUES (%s,%s)"
        cursor.execute(sql,('[email protected]','very_secret'))
    #執行到這一行指令時才是真正改變了資料庫,之前只是快取在記憶體中

    connection.commit()


呼叫資料:查詢[email protected]郵箱的密碼

    with connection.cursor() as cursor:
        sql = "SELECT `id`,`password` FROM `user` WHERE `email`=%s"
        cursor.execute(sql,('[email protected]',))
        #只取出一條結果
        result=cursor.fetchone()
        print(result)

#最後別忘了關閉連線
finally:
    connection.close()

最後呼叫的結果為

{'password': 'very-secret', 'id': 1} 

COMMIT:  1.注意過於頻繁的commit會降低資料插入的效率,可以在多行insert之後一次性commit;2.autocommit選項:預設每一個insert操作都會觸發commit操作方式,是在pymysql.connect的db引數後面,加一個autocommit=True引數

利用Python對iris資料集進行查詢

查詢id為3的行

import pymysql.cursors
connection=pymysql.connect(host='___',user='___',password='___',db='iris',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
try:
    with connection.cursor() as cursor:
        sql= " SELECT * FROM `iris_with_id` WHERE `id`=%s"
        cursor.execute(sql,('3',))
        result=cursor.fetchone()
        print(result)
        print(result['id'])
finally:
    connection.close()

try的主題部分,sql語句,可以根據不同的需要進行改寫。

請複習:

  • 選擇petal_width>0.5的所有行:
import pymysql.cursors
connection=pymysql.connect(host='___',user='___',password='___',db='iris',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
try:
    with connection.cursor() as cursor:
        SELECT * FROM `iris_with_id` WHERE `petal_width`>0.5
        result=cursor.fetchall()
        print(result)
finally:
    connection.close()

  • 選擇petal_width>0.5的所有行的id
import pymysql.cursors
connection=pymysql.connect(host='___',user='___',password='___',db='iris',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
try:
    with connection.cursor() as cursor:
        SELECT * FROM  `iris_with_id` WHERE `petal_width` >0.5
        result=cursor.fetchall()
        print(len(result))
        for each_r in result:
            print(each_r['id'])
finally:
    connection.close()