Python操作MySQL
阿新 • • 發佈:2017-06-09
port sdf cnblogs ctc hal tro 多行 執行sql lai
本篇對於Python操作MySQL主要使用兩種方式:
- 原生模塊 pymsql
- ORM框架 SQLAchemy
pymsql
pymsql是Python中操作MySQL的模塊,其使用方法和MySQLdb幾乎相同。
下載安裝
pip3 install pymysql -i https://pypi.douban.com/simple
使用操作
1、執行SQL
import pymysql user = input("username:") pwd = input("password:")# 創建連接
conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666")# 創建遊標
cursor = conn.cursor() sql = "select * from userinfo where username=‘%s‘ and password=%s" %(user,pwd,)
# select * from userinfo where username=‘uu‘ or 1=1 -- ‘ and password=‘%s‘ #sql註入# 執行SQL,並返回收影響行數
cursor.execute(sql)# 獲取第一行數據
result = cursor.fetchone() cursor.close() conn.close()if result: print(‘登錄成功‘) else: print(‘登錄失敗‘)
註意:存在中文的時候,連接需要添加charset=‘utf8‘,否則中文顯示亂碼。
獲取查詢數據
結論:excute執行SQL語句的時候,必須使用參數化的方式,否則必然產生SQL註入漏洞。
import pymysql user = input("username:") pwd = input("password:") conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666") cursor = conn.cursor() sql = "select * from userinfo where username=%s and password=%s" cursor.execute(sql,user,pwd) #推薦這種方法,防止sql註入
# cursor.execute(sql,[user,pwd]) # cursor.execute(sql,{‘u‘:user,‘p‘:pwd}) #查詢一行
result = cursor.fetchone()
#查詢全部result = cursor.fetchall()
#查詢四行
result = cursor.fetchmany(4)
cursor.close() conn.close() if result: print(‘登錄成功‘) else: print(‘登錄失敗‘)
註:在fetch數據時按照順序進行,可以使用cursor.scroll(num,mode)來移動遊標位置,如:
- cursor.scroll(1,mode=‘relative‘) # 相對當前位置移動
- cursor.scroll(2,mode=‘absolute‘) # 相對絕對位置移動
增加,刪,該
conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666") cursor = conn.cursor() sql = "insert into userinfo(username,password) values(%s,%s)" # 插入多行數據 r = cursor.executemany(sql,[(‘egon‘,‘sb‘),(‘laoyao‘,‘BS‘)]) # ****** # 提交,不然無法保存新建或者修改的數據 conn.commit() cursor.close() conn.close()
fetch數據類型
關於默認獲取的數據是元祖類型,如果想要或者字典類型的數據,即:
# 查 conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666") # 遊標設置為字典類型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "select * from userinfo" cursor.execute(sql) cursor.scroll(1,mode=‘relative‘) # 相對當前位置移動 cursor.scroll(2,mode=‘absolute‘) # 相對絕對位置移動 # 查詢一行 result = cursor.fetchone() print(result) # 查詢全部 result = cursor.fetchall() print(result) # 查詢4行 result = cursor.fetchmany(4) print(result) cursor.close() conn.close()
獲取新創建數據自增ID
# 新插入數據的自增ID: cursor.lastrowid import pymysql conn = pymysql.connect(host="localhost",user=‘root‘,password=‘‘,database="db666") cursor = conn.cursor() sql = "insert into userinfo(username,password) values(‘asdfasdf‘,‘123123‘)" cursor.execute(sql) conn.commit() # 新插入數據的自增ID,插入多條時也是拿到最後一條的ID print(cursor.lastrowid) cursor.close() conn.close()
Python操作MySQL