python mysql數據庫操作


一、pymysql 模塊安裝(本文博客推薦https://www.cnblogs.com/clschao/articles/10023248.html

pip3 install pymysql

 

二、pymysql 方法介紹及其簡單使用(增刪改查:conn.commit( ))

  #注:以下出現的cursor都表示游標

  1、conn=pymysql.connect(host=,port=,user=,password=,database=,charset=)     連接mysql服務器

  2、cursor=conn.cursor()  創建游標,如cmd中的 mysql> ,返回數據為元組

     cursor=conn.cursor(cursor=pymysql.cursor.DictCursor)   #創建游標,返回數據元素為字典

  3、cursor.execute( "mysql語句")  執行mysql 語句, 參數為字符串類型的maysql語句,cursor是游標

  4、cursor.fetchone( )  獲取一個數據

       cursor.fetchmany(n ) 獲取 n個數據

       cursor.fetchall( )  獲取從游標位置到最后的所有的數據

  5、cursor.scroll( n,'absolute') 絕對路徑下游標往下跳過n條數據

       cursor.scroll( n,'relative') 絕對路徑下游標往下跳過n條數據

  6、cursor.close( ) 關閉游標

     conn.close( ) 關閉連接

import pymysql

conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='day03',
    charset='utf8'
) #前提先啟動mysql服務器

#輸出數據的時候,根據游標往后取值
cursor=conn.cursor() #創建游標 mysql>

mysql_cmd="select * from employee;" #命令語句str

cursor.execute(mysql_cmd)  #執行命令行語句

print(cursor.fetchone()) #獲取一條數據

print("------------xxxx-------------")

cursor.scroll(3,'relative') #相對路徑游標往下跳過條數據

print(cursor.fetchall()) #獲取所有數據

cursor.scroll(3,'absolute') #絕對路徑游標往下跳過條數據

print(cursor.fetchone())  #獲取一條數據

 

  

  

一、mysql注入(登陸)

  數據表單userinfo:

        

 

import pymysql

#與數據庫建立連接:host,post,user,password,database,charset;
conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='day04',
    charset='utf8'
)

#輸入需要匹配的元素
username=input("請輸入用戶名") #如:alex'
password=input("請輸入密碼")   #如:123'

#建立游標 mysql>
cursor=conn.cursor() #默認輸出元組(( ,),( ,)...)

verify="select * from userinfo where uname = '%s and pword = %s;"%(username,password) #數據類型  都是字符串char(20)


print(verify)

ret=cursor.execute(verify)

print("影響的數據條數",ret)
if ret:
    print("登錄成功!")
else:
    print("登錄失敗!!!")
cursor.close() #關閉游標
conn.close() #關閉連接

 

 1、普通用戶登陸

2、只知道賬戶進行登陸(bug登陸)

3、賬戶密碼都不知,我TMD還是要登陸。(bid_bug)

 

總結咱們剛才說的兩種sql注入的語句
#1、sql注入之:用戶存在,繞過密碼
chao' -- 任意字符

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

 

 

 

  滿滿的bug,登陸形同虛設,解決方案提供兩個;

 (1):re 表達式

 (2):mysql提供了數據處理機制(cursor.execute(mysl語句,[參數]))|cursor.executemany(mysl語句,[參數1,參數2...]))

僅需優化兩條語句:
verify="select * from userinfo where uname = %s and pword = %s;" #數據類型  都為字符串char(20)
ret=cursor.execute(verify,[username,password])
import pymysql

#與數據庫建立連接:host,post,user,password,database,charset;
conn=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='day04',
    charset='utf8'
)

#輸入需要匹配的元素
username=input("請輸入用戶名:") #如:alex'
password=input("請輸入密碼:")   #如:123

#建立游標 mysql>
cursor=conn.cursor() #默認輸出元組(( ,),( ,)...)

verify="select * from userinfo where uname = %s and pword = %s;" #數據類型  都為字符串char(20)


print(verify)

ret=cursor.execute(verify,[username,password])

print("影響的數據條數",ret)
if ret:
    print("登錄成功!")
else:
    print("登錄失敗!!!")
mysql注入優化

 

三、增刪改:conn.commit( ) 把執行的結果寫入數據庫 (此步驟必不可少,否則操作無效)

  查操作在上面已經說完了,我們來看一下增刪改,也要注意,sql語句不要自己拼接,交給excute來拼接

import pymysql
#鏈接
conn=pymysql.connect(host='localhost',port='3306',user='root',password='123',database='crm',charset='utf8')
#游標
cursor=conn.cursor()

#執行sql語句
#part1
# sql='insert into userinfo(name,password) values("root","123456");'
# res=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數
# print(res)
# print(cursor.lastrowid) #返回的是你插入的這條記錄是到了第幾條了

#part2
# sql='insert into userinfo(name,password) values(%s,%s);'
# res=cursor.execute(sql,("root","123456")) #執行sql語句,返回sql影響成功的行數
# print(res)
#還可以進行更改操作:
#res=cursor.excute("update userinfo set username='taibaisb' where id=2")
#print(res) #結果為1

#part3
sql='insert into userinfo(name,password) values(%s,%s);'
res=cursor.executemany(sql,[("root","123456"),("lhf","12356"),("eee","156")]) #執行sql語句,返回sql影響成功的行數,一次插多條記錄
print(res)
#上面的幾步,雖然都有返回結果,也就是那個受影響的函數res,但是你去數據庫里面一看,並沒有保存到數據庫里面,
conn.commit() #必須執行conn.commit,注意是conn,不是cursor,執行這句提交后才發現表中插入記錄成功,沒有這句,上面的這幾步操作其實都沒有成功保存。
cursor.close()
conn.close()

 

四、查:fetchone,fetchmany,fetchall

import pymysql
#鏈接
conn=pymysql.connect(host='localhost',user='root',password='123',database='egon')
#游標
cursor=conn.cursor()

#執行sql語句
sql='select * from userinfo;'
rows=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數rows,將結果放入一個集合,等待被查詢

# cursor.scroll(3,mode='absolute') # 相對絕對位置移動
# cursor.scroll(3,mode='relative') # 相對當前位置移動
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print('%s rows in set (0.00 sec)' %rows)



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

''' 
(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''

 


免責聲明!

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



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