python 操作MYSQL数据库主要有两种方式:
使用原生模块:pymysql
ORM框架:SQLAchemy
一、pymysql
1.1下载安装模块
第一种:cmd下:执行命令下载安装:pip3 install pymysql
第二种:IDE下pycharm python环境路径下添加模块
1.2使用操作
#导入模块
import pymysql
#建立连接通道,建立连接填入(连接数据库的IP地址,端口号,用户名,密码,要操作的数据库,字符编码)
conn = pymysql.connect(
host="",
port="",
user='',
password='',
database=""
charset="",
)
# 创建游标,操作设置为字典类型,返回结果为字典格式!不写默认是元组格式!
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
#操作数据库的sql语句
sql=""
# 向数据库发送数据,在方法内部进行拼接!!!
#向数据库发送操作单条操作指令
# 格式化输入的值可以单个按顺序传入 或是写成列表 (注意 顺序和位置)
r = cursor.execute(sql,v1,v2……)
r = cursor.execute(sql,args)
#r 代表接收返回受影响的行数(数字)及执行这一条sql语句,数据库中有多少行受到了影响。
#sql 指上边写的sql语句
#args 指要给sql语句中传的参数
sql 语句可以不传值 及为空 []
sql 语句可以传一个值 及 [v1,]
sql 语句可以传多值 及 [v1,v2,v3……]
#向数据库发送操作多条数据指令 args=[(v1,s1),(v2,s2),(v3,s3)]
r = cursor.executemany(sql,[('egon','sb'),('laoyao','BS')])
#数据库有四种操作:增删改查!
# 执行查操作的时候就得接收从数据库返回的数据!
#执行增删改操作的时候,就需要像数据库提交数据!
#查操作:(接收的数据格式由创建的游标样式决定!)
#接收数据有三种方式:
res = cursor.fetchone() #接收返回的第一行数据
ret = cursor.fetchmany(n) #接收返回的n行数据
req = cursor.fetchall() #接收返回的说有数据
#注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:
cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
#增删改操作:
#写完发送操作语句之后,就需要把更改的数据提交,不然数据库无法完成新建或是修改操作
conn.commit() #提交
#注:此处有个获取新建数据自增ID的操作(只能拿到最后那一行的id数)
#执行增加语句,并提交之后,可以获取到
new_id=cursor.lastrowid
print(new_id)
#操作完成之后,就需要关闭连接
cursor.close() #关闭游标
conn.close() #关闭连接
操作总结:
1、重中之重,一定要注意sql注入的问题!!!
#格式化写入sql语句,就会造成sql注入的情况!!!
import pymysqluser =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'
cursor.execute(sql)
result= cursor.fetchone()cursor.close()
conn.close()ifresult:print('登录成功')else:print('登录失败')
sql注入问题示例
import pymysqluser =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"
# sql= "select * from userinfo where username=%(u)s and password=%(p)s"
#传入数据类型举例cursor.execute(sql,user,pwd) #直接传值
#cursor.execute(sql,[user,pwd]) #列表形式
#cursor.execute(sql,{'u':user,'p':pwd}) #字典格式
result= cursor.fetchone()cursor.close()
conn.close()ifresult:print('登录成功')else:print('登录失败')
传入数据类型举例
import pymysql
# 增加,删,该
# conn= pymysql.connect(host="localhost",user='root',password='',database="db666")
#cursor = conn.cursor()
# sql= "insert into userinfo(user