1、pymysql模塊:連接、執行mysqlmysql
安裝模塊:pip3 install pymysqlsql
# 語法: # pymysql操做數據庫: 1. conn = pymysql.connect # 連接數據庫 2. cursor = con.cursor() 3. cursor.execute(sql語句) # 查詢 4. cursor.fetchone() # 取一行數據 5. cursor.fetchmany(5) # 取指定幾行數據 6. cursor.fetchall() # 取到全部的結果集 # 增長 # 增長一條數據: cursor.execute(insert 語句, 傳入的參數) # 增長多條數據: cursor.executemany(insert 語句, 傳入的多個參數) conn.commit() # 刪除 # 刪除一條數據: cursor.execute(delete語句, 傳入的參數) # 刪除多條數據: cursor.executemany(delete語句, 傳入的多個參數) conn.commit() # 修改 # 修改一條數據: cursor.execute(update語句, 傳入的參數) #修改多條數據: cursor.executemany(update語句,傳入的多個參數) conn.commit()
# 查詢 import pymysql user=input('用戶名: ').strip() password=input('密碼: ').strip() #連接 conn=pymysql.connect(host='localhost',user='root',password='root',database='user',charset='utf8') #遊標 cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示 #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) #執行sql語句 sql='select * from user where username="%s" and pwd="%s"' %(user,password) #注意%s須要加引號,可是像這樣寫會致使sql注入的狀況 print(sql) res=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目 print(res) # 1 cursor.close() conn.close() if res: print('登陸成功') else: print('登陸失敗')
execute()之sql注入數據庫
# sql注入 sql = "select * from user where username = '%s' and pwd = '%s'" % (username, pwd) res = cursor.execute(sql)
# 採用上面這種方式,很容易被進行sql注入,影響數據安全 #一、sql注入之:用戶存在,繞過密碼 simon' -- 任意字符 #二、sql注入之:用戶不存在,繞過用戶與密碼 xxx' or 1=1 -- 任意字符 # 解決方法 # 原來是咱們對sql進行字符串拼接 # sql="select * from user where username='%s' and pwd='%s'" %(user,password) # print(sql) # res=cursor.execute(sql) #改寫爲(execute幫咱們作字符串拼接,咱們無需且必定不能再爲%s加引號了) sql="select * from user where username=%s and pwd=%s" #!!!注意%s須要去掉引號,由於pymysql會自動爲咱們加上 res=cursor.execute(sql,(user,password)) #pymysql模塊自動幫咱們解決sql注入的問題,只要咱們按照pymysql的規矩來。
數據表增長一條或多條數據:安全
import pymysql ### 連接mysql數據庫 conn = pymysql.connect(host='localhost', user='root', password='root', database='user') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "insert into userinfo (name, email) values (%s, %s)" ### 增長一條數據 # cursor.execute(sql, ('zekai6', 'yui')) # 執行sql語句,返回sql影響成功的行數 ### 增長多條數據 data = [] for i in range(3000000): data.append(('root'+str(i), 'root'+str(i)+'@qq.com')) cursor.executemany(sql, data) ### 提交後才發現表中插入記錄成功 conn.commit() cursor.close() conn.close()
刪除數據:app
import pymysql ### 連接mysql數據庫 conn = pymysql.connect(host='localhost', user='root', password='root', database='user') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "delete from user where id=%s" ### 刪除一條數據 # cursor.execute(sql, (11)) try: cursor.executemany(sql, (12,13,14)) ### 提交 conn.commit() except Exception as e: conn.rollback() # print(cursor.lastrowid) cursor.close() conn.close()
獲取插入的最後一條數據的自增IDfetch
import pymysql conn=pymysql.connect(host='localhost',user='root',password='root',database='user') cursor=conn.cursor() sql='insert into userinfo(username,pwd) values("xxx","123");' rows=cursor.execute(sql) print(cursor.lastrowid) #在插入語句後查看 conn.commit() cursor.close() conn.close()