python的pymysql模塊簡介


一.介紹

在python中用pymysql模塊來對mysql進行操作,該模塊本質就是一個套接字客戶端軟件,使用前需要事先安裝

pip3 install pymysql

二.操作簡介

import pymysql

#鏈接
conn=pymysql.connect(host='localhost',user='root',password='123',database='test',charset='utf8')
#游標
cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示
#執行sql語句
sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s需要加引號
print(sql)
res=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目
print(res)

cursor.close()
conn.close()

if res:
    print('登錄執行成功')
else:
    print('失敗')

三.execute()之sql注入

符號--會注釋掉它之后的sql,正確的語法:--后至少有一個任意字符

注入的原理就是通過拼接和注釋繞過驗證

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

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

解決方法:
# 原來是我們對sql進行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
# print(sql)
# res=cursor.execute(sql)

#改寫為(execute幫我們做字符串拼接,我們無需且一定不能再為%s加引號了)
sql="select * from userinfo where name=%s and password=%s" #!!!注意%s需要去掉引號,因為pymysql會自動為我們加上
res=cursor.execute(sql,[user,pwd]) #pymysql模塊自動幫我們解決sql注入的問題,只要我們按照pymysql的規矩來。

四.增刪改

就是sql的增刪改語句寫入

sql = 'INSERT INTO student VALUES(9, "wang1", "male", 6)'
# sql = 'update student set class_id = 4 where sname = "wang1"'
# sql = 'delete from student where sname = "wang1"'
res = cursor.execute(sql)
print(res)

conn.commit()

如果數據庫引擎是innodb那么增刪改后需要用conn.commit()來確認修改不然不起效

sql = 'INSERT INTO student VALUES(9, "wang1", "male", 6)'
sql1 = 'select * from student'
res = cursor.execute(sql)
cursor.execute(sql1)
print(cursor.fetchall())

#不加conn.commit()的結果
((1, '喬丹', 'female', 1), (2, '艾佛森', 'female', 1), (3, '科比', 'male', 2), (4, '小明', 'male', 3), (5, '小芳', 'female', 8), (6, '小明', 'female', 9), (7, 'alex', 'male', 6), (8, 'wang', 'male', 5), (9, 'wang1', 'male', 6))

雖然會話有顯示但是實際庫中沒有

重新執行加入commit()生效

sql = 'INSERT INTO student VALUES(9, "wang1", "male", 6)'
res = cursor.execute(sql)
conn.commit() # 確認插入操作

五.查詢

表內容如下:

fetchone,fetchmany,fetchall

sql = 'select * from student'
res = cursor.execute(sql)
print(cursor.fetchone()) #查詢一條記錄
print(cursor.fetchone())
print(cursor.fetchmany(2)) #查詢兩條記錄
print(cursor.fetchall()) #查詢剩余所有記錄
print(res) #顯示幾條記錄

執行結果以元組形式顯示
(1, '喬丹', 'female', 1)
(2, '艾佛森', 'female', 1)
((3, '科比', 'male', 2), (4, '小明', 'male', 3))
((5, '小芳', 'female', 8), (6, '小明', 'female', 9), (7, 'alex', 'male', 6), (8, 'wang', 'male', 5))
8

lastrowid 

獲取插入的最后一條數據的自增ID,只能顯示數據表屬性是自增字段的值

sql = 'INSERT INTO student VALUES(9, "wang1", "male", 6)'
res = cursor.execute(sql)
print(cursor.lastrowid)

執行結果
9

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM