Pymsql
安装
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
连接数据库
from pymysql import Connection, connect
connect = None
try:
connect = Connection(
host='localhost',
port=3306,
user='root',
password='root',
)
print("连接mysql成功")
except Exception as e:
print(e)
finally:
if connect is not None:
connect.close()
使用游标执行语句
from pymysql import Connection, connect
connect = None
try:
connect = Connection(
host='localhost',
port=3306,
user='root',
password='root',
database='web_test', #指定要操作的数据库
)
#选择要操作的数据库
connect.select_db('web_test')
#获取游标对象
cursor = connect.cursor()
#cursor.execute(数据库操作语句)
except Exception as e:
print(e)
finally:
if connect is not None:
connect.close()
选择操作的数据库可以在创建Connection对象时指定,也可以通过
select_db
方法指定
查询数据库
游标
#获取游标对象
cursor = connect.cursor()
cursor.execute('select * from user')
#获取查询所有结果
result = cursor.fetchall()
#遍历结果
for row in result:
print(row)
游标方法
fetchall
查询所有结果
fetchon
查询当前位置下一行
scroll
游标移动,mode参数: “absolute” 绝对位置移动,”relative”相对位置移动
fetchmany
获取指定数量的结果
from pymysql import Connection, connect
connect = None
try:
connect = Connection(
host='localhost',
port=3306,
user='root',
password='root',
database='web_test', #指定要操作的数据库
)
#选择要操作的数据库
connect.select_db('web_test')
#获取游标对象
cursor = connect.cursor()
#未执行时rowcount = -1
print(cursor.rowcount)
cursor.execute('select * from user')
# rowcount = 8
print(cursor.rowcount)
#查询多个
#res = cursor.fetchmany(cursor.rowcount)
cursor.scroll(0, mode='absolute') # 相对绝对位置移动
print(cursor.fetchone()) #查询当前行的下一行
cursor.scroll(1, mode='relative') # 相对当前位置移动
print(cursor.fetchone()) #查询当前行的下一行
except Exception as e:
print(e)
finally:
if connect is not None:
connect.close()
参数传递
#获取游标对象
cursor = connect.cursor()
cursor.execute("select * from user where username like %s",('%jack%'))
res = cursor.fetchall()
for re in res:
print(re)
通常查询条件我们使用元组传递,使用
%s
占位符传递值,这样子可以防止sql注入问题
SQL注入代码示范
username = "'' OR '1'='1'"
cursor.execute(f"select * from user where username like {username}")
这是一段危险代码会导致SQL注入,使得查询出所有用户信息
更新操作
#获取游标对象
cursor = connect.cursor()
sql = "update user set username = %s where uid = %s"
# 执行SQL语句
cursor.execute(sql,( "user0001",10))
%s
作为通用占位符,会自动转换数据类型
事务操作
删除操作
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
# 执行SQL语句
cursor.execute(sql)
# 提交修改
connect.commit()
except:
# 发生错误时回滚
connect.rollback()
# 关闭连接
connect.close()
以删除操作为例,如果发生异常自动回滚
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com