1. 程式人生 > >Python操作MySQL

Python操作MySQL

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