每一個想努力的念頭,都是未來的你在向現在的你求救。
安裝 pymysql 第三方包:pip install pymysql
PS D:\tmp> pip install pymysql
Collecting pymysql
Downloading PyMySQL-1.0.2-py3-none-any.whl (43 kB)
---------------------------------------- 43.8/43.8 kB 179.6 kB/s eta 0:00:00
Installing collected packages: pymysql
Successfully installed pymysql-1.0.2
PS D:\tmp> pip show pymysql
Name: PyMySQL
Version: 1.0.2
Summary: Pure Python MySQL Driver
Home-page: https://github.com/PyMySQL/PyMySQL/
Author: yutaka.matsubara
Author-email: yutaka.[email protected].com
License: "MIT"
Location: c:\users\administrator\appdata\local\packages\pythonsoftwarefoundation.python.3.9_qbz5n2kfra8p0\localcache\local-packages\python39\site-packages
Requires:
Required-by:
PS D:\tmp>
說明:
pip install
第三方包名pip uninstall
第三方包pip show pymysql
命令查看第三方包的信息pip list
查看使用 pip 命令安裝的第三方包列表1 導入 pymysql 包
import pymysql
2 創建連接對象
調用 pymysql 模塊中的 connect() 函數來創建連接對象。
conn = connect(參數列表)
參數host:連接的mysql主機,如果是本機則為'localhost'
參數port:連接的mysql主機的端口,默認為3306
參數user:連接的用戶名
參數password:連接的密碼
參數database:數據庫的名稱
參數charset:通信采用的編碼方式,一般為utf8
連接對象操作說明:
關閉連接:conn.close()
提交數據:conn.commit()
撤銷數據:conn.rollback()
3 獲取游標對象
獲取游標對象的目的就是要執行 sql 語句,完成對數據庫的增、刪、改、查操作。
調用連接對象的 cursor()方法獲取游標對象
cur = conn.cursor()
游標操作說明:
# 導包
import pymysql
# 創建連接對象
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='root',
database='tts',
charset='utf8'
)
# 獲取游標對象(游標就好比一個搬運工,把sql語句交給數據庫,把數據庫返回的結果交給python)
cursor = conn.cursor()
sql = 'select * from users;'
# 執行sql語句
cursor.execute(sql)
# 獲取查詢結果(fetchone返回第一個結果,fetchall返回所有結果)
# row = cursor.fetchone()
# print(row)
res = cursor.fetchall()
for i in res:
print(i)
# 關閉游標
cursor.close()
# 關閉連接
conn.close()
結果:
PS E:\pdf1> python .\img.py
(1, '計秀蘭', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'rtdgo4jo52', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
(2, '郭子安', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'D6dlh6DXLY', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
(3, '李全安', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'B8hzJBseiG', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
PS E:\pdf1>
import pymysql
conn = pymysql.connect(
user='root',
password='root',
host='localhost',
database='tts',
port=3306,
charset='utf8'
)
cursor = conn.cursor()
# sql = 'insert into classes(name) values("新增數據");'
# sql = 'update classes set name="修改數據" where id=4;'
sql = 'delete from users where id=2;'
try:
# 執行sql語句
cursor.execute(sql)
# 提交增刪改數據
conn.commit()
except Exception as e:
# 回滾數據,即撤銷剛剛進行的sql語句操作
conn.rollback()
finally:
cursor.close()
conn.close()
說明:
conn.commit() 表示將修改操作提交到數據庫
conn.rollback() 表示回滾數據
什麼是SQL注入?
用戶提交帶有惡意的數據與SQL語句進行字符串方式的拼接,從而影響了SQL語句的語義,最後出現數據洩露的現象。
如何防止SQL注入?
SQL語句參數化:
%s
來占位,這不是 python 中的字符串格式化操作。%s
占位所需要的參數存在一個列表(或元組或字典)中,把參數列表傳遞給 execute 方法中的第二個參數。# 導包
import pymysql
# 創建連接對象
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='密碼',
database='hello',
charset='utf8'
)
# 獲取游標對象(游標就好比一個搬運工,把sql語句交給數據庫,把數據庫返回的結果交給python)
cursor = conn.cursor()
sql = "select * from users where name= '%s';" % "張三' or 1 = 1 or'"
# 執行sql語句
cursor.execute(sql)
# 獲取查詢結果(fetchone返回第一個結果,fetchall返回所有結果)
# row = cursor.fetchone()
# print(row)
res = cursor.fetchall()
for i in res:
print(i)
# 關閉游標
cursor.close()
# 關閉連接
conn.close()
結果(返回了所有數據):
PS E:\pdf1> python .\img.py
(1, '計秀蘭', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'rtdgo4jo52', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
(2, '郭子安', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'D6dlh6DXLY', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
(3, '李全安', '[email protected]', '$2y$10$qGnquE.Nd8g5XHJaIquSZuSBhw6AN.FeO.BxwY90poGdYohAlRh66', None, 0, None, 'B8hzJBseiG', datetime.datetime(2022, 7, 1, 3, 40, 26), datetime.datetime(2022, 7, 1, 3, 40, 26))
PS E:\pdf1>
# 導包
import pymysql
# 創建連接對象
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
password='密碼',
database='hello',
charset='utf8'
)
# 獲取游標對象(游標就好比一個搬運工,把sql語句交給數據庫,把數據庫返回的結果交給python)
cursor = conn.cursor()
sql = "select * from users where name= %s;"
# 執行sql語句
cursor.execute(sql, ["張三' or 1 = 1 or'"])
# 獲取查詢結果(fetchone返回第一個結果,fetchall返回所有結果)
# row = cursor.fetchone()
# print(row)
res = cursor.fetchall()
for i in res:
print(i)
# 關閉游標
cursor.close()
# 關閉連接
conn.close()