一、cur.execute怎么用
在Python中,如果要执行一条SQL语句,需要借助数据库连接对象的execute()方法。而如果要从数据库中查询数据,则需要使用游标(Cursor)对象的execute()方法。其中,cur是代表游标对象。Cur.execute()可以执行任何SQL语句,但它最常用的用法是执行SELECT语句,获取查询结果集。
下面是一个例子,该例子中的SQL语句将查询一张名为"student"的表中的所有记录:
import pymysql
connection = pymysql.connect(
host='localhost', # 数据库所在的主机IP
port=3306, # 数据库使用的端口
user='root', # 连接数据库的用户名
password='', # 登录密码
db='test', # 数据库名称
charset='utf8') # 使用的字符集,一般为utf8
try:
with connection.cursor() as cur:
sql = "SELECT * FROM student"
cur.execute(sql)
rows = cur.fetchall()
for row in rows:
print(row)
finally:
connection.close()
在上面的代码中,Cur.execute()方法接收一个SQL语句作为参数,并执行这条语句。Cur.fetchall()方法会从游标指向的结果集中返回所有行,这些行被作为元组嵌套列表返回到Python中。
二、cur.execute什么意思
Cur.execute() 方法是一个 Cursor 对象的方法,用于执行 SQL 查询。这个方法显然是对接口的基础操作之一,它能够接受任何类型的 SQL 命令,包括查询,插入,更新和删除。在使用 PyMySQL 连接数据库时,游标对象需要根据 SQL 命令的类型选择 Cur.execute() 的不同调用方式。
根据 SQL 命令类型调用 Cur.execute(SQL, params=None) 的方式是:其中 params 是 SQL 语句中应替换的变量,如果没有参数可传,则应将参数设置为 None。举例来说,对于下面这个查询语句:
SELECT *
FROM student
WHERE name = %s;
使用 Cur.execute() 方法时应该这样写:
name = input('请输入学生姓名: ')
sql = 'SELECT * FROM student WHERE name = %s;'
cur.execute(sql, (name,))
注意,%s 是在 SQL 查询中用于占位符的通用符,用来表示查询的条件。在 PyMySQL 中 %s 是用来替代 SQL 语句 placeholders 里的字符串参数的,这些参数存储在元组中,并在游标执行之前传递给 SQL 命令。传递参数时,必须将参数作为元组传递。如果你尝试按对象传递参数,你将看到编码错误。
三、cur.execute常用参数
1.参数化查询
参数化查询指的是,在查询或插入数据时,使用参数替换而不是直接将数据拼接到SQL语句中。这样做既可以提高执行效率,又能有效防止SQL注入攻击。例如,下面的SQL语句可以将数据插入到“student”表中:
INSERT INTO student (name, age) VALUES ('bob', 18)
使用参数化查询,可以将SQL语句修改为:
INSERT INTO student (name, age) VALUES (%s, %s)
在执行陈述时,将数据以元组的形式传递给execute()方法。
cur.execute(sql, (name, age))
2.获取最后插入的ID
在执行插入语句后,可以使用cur.lastrowid属性获取最后一个插入行的ID。
cur.execute("INSERT INTO student (name, age) VALUES (%s, %s)", ("bob", 18))
last_id = cur.lastrowid
3.批量执行SQL语句
当需要一次执行多个SQL语句时,可以使用execute()方法的多个调用。这种方式在处理大量数据时非常有用。
sql_1 = "INSERT INTO student (name, age) VALUES ('bob', 18)"
sql_2 = "INSERT INTO student (name, age) VALUES ('jane', 20)"
sql_3 = "INSERT INTO student (name, age) VALUES ('tom', 22)"
cur.execute(sql_1)
cur.execute(sql_2)
cur.execute(sql_3)
4.执行存储过程
在执行存储过程时,可以使用execute()方法来调用存储过程。在调用存储过程时,也可以提供参数。
cur.callproc('procedure_name', args)
其中,procedure_name是存储过程名称,args是参数列表。
5.执行动态SQL语句
在编写动态SQL语句时,可以使用execute()方法来执行这些语句。动态SQL语句是通过构建字符串来创建的,然后传递给execute()方法执行。
sql = "SELECT * FROM student WHERE name = %s" % name
cur.execute(sql)
要注意避免SQL注入攻击,应使用参数化查询。
结束语
总的来说,cur.execute()方法是Python与数据库交互的重要组成部分,通过execute()方法,我们可以在Python中执行各种SQL语句并获取返回结果。而在执行SQL语句时,需要注意参数化查询、获取最后插入的ID、批量执行SQL语句、执行存储过程以及执行动态SQL语句等常用参数。