數據庫開發——MySQL——pymysql模塊

一、介紹

之前我們都是通過MySQL自帶的命令行客戶端工具mysql來操作數據庫,那如何在python程序中操作數據庫呢?

這就用到了pymysql模塊,該模塊本質就是一個套接字客戶端軟件,使用前需要事先安裝。

pip install -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com  pymysql

二、鏈接、執行SQL、關閉鏈接

在這裏插入圖片描述

import pymysql


# 建立鏈接
conn = pymysql.connect(host="localhost", user="root", password="20001001", database="db", charset="utf8")

# 初始化遊標
cursor = conn.cursor()

# 執行SQL語句
name = input("Please input name: ").strip()
sql = 'select * from employee where name = "%s";' % name
print("sql: ", sql)
res = cursor.execute(sql)
print("res: ", res)

cursor.close()
conn.close()

執行結果爲:

Please input name: alex
sql:  select * from employee where name = "alex"
res:  1

三、execute()之sql注入

SQL語句的註釋符號爲:–

因此註釋之後的所有語句都不會執行。

#1、sql注入之:用戶存在,繞過密碼
alex' -- 任意字符

#2、sql注入之:用戶不存在,繞過用戶與密碼
xxx' or 1=1 -- 任意字符

pymysql其實已經幫我們做好了這方面的防護,使用execute幫助我們拼接SQL語句更加安全。

sql="select * from userinfo where name=%s and password=%s" 	# 注意%s需要去掉引號,因爲pymysql會自動爲我們加上
res=cursor.execute(sql,[user,pwd]) 	# pymysql模塊自動幫我們解決sql注入的問題,只要我們按照pymysql的規矩來。

四、pymysql增刪改查

import pymysql


conn = pymysql.connect(host="localhost", user="root", password="20001001", database="db")
cursor = conn.cursor()

# 增
sql1 = 'insert into employee (name, sex, age, dep_id) values(%s, %s, %s, %s);'
res1 = cursor.execute(sql1, ("Alex", "male", 19, 200))
print("res1: ", res1)

res2 = cursor.executemany(sql1, [("Coco", "female", 19, 201), ("Bei", "female", 5, 202)])
print("res2: ", res2)
print(cursor.lastrowid)     # 獲取插入的最後一條數據的自增ID

# 刪
sql2 = "delete from employee where name = %s;"
res2 = cursor.execute(sql2, "alex")
print("res3: ", res2)

# 改
sql3 = "update employee set age = 2 where name = %s;"
res3 = cursor.execute(sql3, "Bei")
print("res3: ", res3)

# 查
sql4 = "select * from employee;"
res4 = cursor.execute(sql4)
print("res41: ", cursor.fetchone(), end="\n\n")
print("res42: ", cursor.fetchmany(2), end="\n\n")
print("res43: ", cursor.fetchall(), end="\n\n")

conn.commit()   # 提交後才發現表中插入記錄成功

cursor.close()
conn.close()

執行結果爲:

res1:  1
res2:  2
8
res3:  2
res3:  1
res41:  (1, 'egon', 'male', 18, 200)
res42:  ((3, 'wupeiqi', 'male', 38, 201), (4, 'yuanhao', 'female', 28, 202))
res43:  ((5, 'liwenzhou', 'male', 18, 200), (6, 'jingliyang', 'female', 18, 204), (8, 'Coco', 'female', 19, 201), (9, 'Bei', 'female', 2, 202))
Process finished with exit code 0

數據庫結果:
在這裏插入圖片描述

發佈了685 篇原創文章 · 獲贊 157 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章