首页 > 代码库 > Python操作MySQL

Python操作MySQL

本篇对于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