3-4 用Python 進行資料庫連線與資料查詢(版本:py3)
阿新 • • 發佈:2018-12-10
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()