pymysql

在python中使用pymysql库连接MySQL数据库并进行操作。

1. 引入库

import pymysql

2. 创建连接对象

db = pymysql.connect(
	host='localhost',
	port=3306,
	user='root',
	password='hhhh', 
	database='test',
	charset='utf8'
)

3. 获取游标对象

cursor = db.cursor()

4. 执行sql语句并获取返回结果

# sql语句
sql = "select * from dept;"

# 执行语句,返回值为影响的行数
count = cursor.execute(sql)   # 影响的行数

# 执行结果
content = cursor.fetchone()   # 往后继续查询到的一个
print(content)
content = cursor.fetchall()   # 往后继续查询到的所有
print(content)

5. sql语句参数化

        为什么要参数化?

        在直接将字符串传入sql语句中时,有sql注入风险,如恶意拼接、传入非法参数、增加恶意指令、添加额外条件等。示例代码如下:

# 传入'or 1 or',使表达式为真值,实现sql注入,不安全。
input_dept_name = input("请输入您的部门名称:")
sql = "select * from dept where name = '%s'" % input_dept_name
cursor.execute(sql)
content = cursor.fetchall()
print(content)

        当用户输入

'or 1 or'

        sql语句变成了

sql = "select * from dept where name = ''or 1 or''" % 

        '%s' 中的单引号和传入的单引号组成了空串'',1为真,’‘ or 1 or ''为真,where后的表达式为真,带来风险。为避免这一风险,将sql语句参数化。

# sql语句参数化防止sql注入
input_dept_name = input("请输入您的部门名称:")
# 构造参数列表
params = [input_dept_name]
# 执行
sql = "select * from dept where name = %s"  # 注意%s不加引号
cursor.execute(sql, params)
content = cursor.fetchall()
print(content)

6. 事务操作提交与回滚

# 提交事务操作,默认开启事务,需手动提交。
db.commit()
# 回滚事务操作,try: … catch: …
db.rollback()

7. 关闭游标和连接

# 注意先后顺序,先关闭游标,再关闭连接
cursor.close()
db.close()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值