python3 mysql模块_8.6.1 python3的mysql模块pymysql
之前我們都是通過MySQL自帶的命令行客戶端工具mysql來操作數據庫,那如何在python程序中操作數據庫呢?這就用到了pymysql模塊,該模塊本質就是一個套接字客戶端軟件,使用前需要事先安裝
二?鏈接、執行sql、關閉(游標)
import pymysql
login_user=input("user>>").strip()
login_pwd= input("passwor>>").strip()
# 建立連接
conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="cmz",
passwd="cmz",
db="leco",
charset="utf8")
# 拿到游標
cursor=conn.cursor()
sql= 'select * from userinfo where user ="%s" and pwd="%s"' %(login_user, login_pwd)
row=cursor.execute(sql)
cursor.close()
conn.close()
# 判斷ifrow:
print("登錄成功")else:
print("登錄失敗")
C:\Python35\python.exe D:/MySQL/mysql基本使用.py
user>>cmz
passwor>> 123登錄成功
View Code
三?execute()之sql注入
注意:符號--會注釋掉它之后的sql,正確的語法:--后至少有一個任意字符
根本原理:就根據程序的字符串拼接name='%s',我們輸入一個xxx' -- haha,用我們輸入的xxx加'在程序中拼接成一個判斷條件name='xxx' -- haha'
最后那一個空格,在一條sql語句中如果遇到select * from t1 where id > 3 -- and name='cmz';則--之后的條件被注釋掉了
#1、sql注入之:用戶存在,繞過密碼
cmz'-- 任意字符 # --在MySQL中表示注釋
#2、sql注入之:用戶不存在,繞過用戶與密碼
xxx'or 1=1 -- 任意字符
user>> xxx"or 1=1 -- jaa
passwor>>
select * from userinfo where user ="xxx" or 1=1 -- jaa"and pwd=""登錄成功
解決方法:
# 原來是我們對sql進行字符串拼接
# sql="select * from userinfo where name='%s' and password='%s'" %(login_user,login_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,[login_user,login_pwd]) #[login_user,login_pwd] 和 (login_user,login_pwd) 都有可以
#pymysql模塊自動幫我們解決sql注入的問題,只要我們按照pymysql的規矩來。
四?增、刪、改:conn.commit()
增刪改
import pymysql
# 建立連接
conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="cmz",
passwd="cmz",
db="leco",
charset="utf8")
# 拿到游標
cursor=conn.cursor()
# 增刪改
sql= 'insert into userinfo(user,pwd) values(%s, %s)'# row= cursor.execute(sql,("xxx",'123'))
row= cursor.executemany(sql,[('yxx','123'),('cmz1','111'),('cmz2','2222')]) # #執行sql語句,返回sql影響成功的行數
print(row)
conn.commit() #提交后才發現表中插入記錄成功
cursor.close()
conn.close()
五?查:fetchone,fetchmany,fetchall
# 查詢
import pymysql
# 建立連接
conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="cmz",
passwd="cmz",
db="leco",
charset="utf8")
# 拿到游標
# cursor=conn.cursor(pymysql.cursors.DictCursor)
cursor=conn.cursor(pymysql.cursors.DictCursor)
# 查詢
row= cursor.execute('select * from userinfo;') #執行sql語句,返回sql影響成功的行數rows,將結果放入一個集合,等待被查詢
print(row)
# print(cursor.fetchall()) # 一次取全部
# print(cursor.fetchmany(2)) # 一次取N(2)條
# print(cursor.fetchone()) # 一次取一條
# print(cursor.fetchone()) # 一次取一條
# print(cursor.fetchone()) # 一次取一條
#
# cursor.scroll(3,mode='absolute') # 相對絕對位置移動
# cursor.scroll(3,mode='relative') # 相對當前位置移動
# cursor.scroll(3,mode='absolute') # 相對絕對位置移動
print(cursor.fetchone())
print(cursor.fetchone())
cursor.scroll(2,mode='relative') # 向后移動兩條數據
print(cursor.fetchone())
conn.commit()
cursor.close()
conn.close()
結果:
12{'user': 'cmz', 'id': 1, 'pwd': '123'}
{'user': 'leco', 'id': 2, 'pwd': '456'}
{'user': 'cmz1', 'id': 5, 'pwd': '111'}18
五?獲取插入的最后一條數據的自增ID
在插入之前查看數據庫
id在15
import pymysql
# 建立連接
conn=pymysql.connect(
host="127.0.0.1",
port=3306,
user="cmz",
passwd="cmz",
db="leco",
charset="utf8")
# 拿到游標
cursor=conn.cursor()
# 插入
sql= 'insert into userinfo(user,pwd) values(%s, %s)'# row= cursor.execute(sql,("xxx",'123'))
row= cursor.executemany(sql,[('cc1','123'),('cc2','111'),('cc3','2222')]) # 一次性插入多條
print(cursor.lastrowid) #獲取插入的最后一條數據的自增ID
conn.commit()
cursor.close()
conn.close()
結果是
C:\Python35\python.exe D:MySQL/mysql模塊之增刪改查.py21
此時查看數據庫自增的ID
總結
以上是生活随笔為你收集整理的python3 mysql模块_8.6.1 python3的mysql模块pymysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 条件运算符使用
- 下一篇: android怎样开启root权限管理,