python中使用MySQL的子產品
import pymysql
python中使用MySQL的基本流程

·
python中使用MySQL的代碼模闆
from pymysql import *
# 建立connection連接配接
conn = connect(host="localhost",port=3306,user="root",password="mysql",database="本地資料庫名稱", charset="utf8")
# 獲得cursor對象
cs = conn.cursor()
# 輸入sql語句,cout中儲存的是通過sql語句受到影響的行數
cout = cs.execute("sql語句")
# 列印sql語句擷取的内容
cs.fetchone() # 一次列印一條内容(以元組的形式)
cs.fetchmany(numb) # 一次列印numb條内容(以元組的形式)
cs.fetchall() # 一次列印所有内容(以元組的形式)
# 當寫入的sql語句是增删改時,commit()方法用來送出之前多次執行過的execute(sql語句(增删改))方法
conn.commit()
# 關閉cursor對象
cs.close()
# 關閉連接配接
conn.close()
·
注:這裡如果用pymysql無法建立connection本地連接配接,出現錯誤(
pymysql.err.OperationalError: (1045, u"Access denied for user 'root'@'localhost' (using password: No)")
)
可在終端進入mysql,并輸入
原因:
更換密碼的認證方式,新版mysql使用的caching_sha2_password,換成mysql_native_password就可以連上了
·
·
● 當
execute()
中寫入的sql語句為增删改時,每執行一句
execute()
,資料庫中并不會顯示寫入的操作,隻有在最後調用
conn.commit()
方法時,才會将之前所執行過的所有
execute()
進行送出,進而對資料據庫進行操作
● 為了防止多個程式同時對一個資料庫進行增删改,最後調用
commit()
方法必挂,所有每執行一句
execute(sql語句)
時,該表的auto_increment會自動增加
● 在調用
conn.commit()
方法之前,如果想撤銷之前的增删改操作,則可以調用
conn.rollback()
,此方法必須在
commit()
方法調用之前調用才有效,但是即便撤銷了,auto_increment 數值也已經發生了改變
·
·
關于sql注入
在使用者進行查詢時,使用者輸入的内容會填到sql語句中然後對資料庫進行操作,當使用者輸入的内容(例如
' or 1=1 or '
)比對到sql語句中可配通,(這裡整句話相當于true),則可直接對資料庫進行操作
例:
s_name = input("請輸入要查詢的内容:")
self.cs.execute("""select * from goods where name="%s";""" % s_name)
print(self.cs.fetchall())
實驗結果:
·
簡單防止sql注入
s_name = input("請輸入要查詢的内容:")
# execute方法會自動将清單中的元素替換到sql語句中的%s
self.cs.execute("select * from goods where name=%s;", [s_name])
print(self.cs.fetchall())
實驗結果: