当我们使用Python中的MySQL数据库操作时,有时需要传入多个参数,此时我们可以使用in语句来替代多个And或Or语句,提高代码的可读性。但如果使用字符串拼接的方式传参会增加SQL注入的风险,因此需要使用参数化查询。
下面就是一个Python MySQL中in参数化的完整攻略。
准备工作
首先需要安装Python中的MySQL库,可以使用命令pip install mysql-connector-python
来安装。
接着,我们需要连接到MySQL数据库。以下示例代码连接到本地MySQL数据库并选择名为testdb的数据库。
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="testdb"
)
参数化查询
我们可以使用Python MySQL驱动程序的cursor.execute()
或cursor.executemany()
方法来执行参数化查询。
cursor.execute()
方法用于执行一条SQL语句,可以带有参数。该方法只接受单个参数,即包含SQL语句和参数的元组。
以下是一个使用cursor.execute()
执行参数化查询的示例:
mycursor = mydb.cursor()
sql = "SELECT * FROM customers WHERE country IN (%s, %s)"
in_values = ('Norway', 'Sweden')
mycursor.execute(sql, in_values)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
上述代码中,使用了一个sql
变量来存储SQL语句,其中country IN (%s, %s)
表示需要查询的数据在两个参数内(这里用了两条%占位符)
然后在使用mycursor.execute()
方法时将in_values
作为第二个参数传入,实现参数化查询。
在例子中,in_values包含两个值,这两个值分别对应SQL语句中的两个占位符。当你有更多的值时,需要在in_values中添加相应的元素。
cursor.executemany()
方法用于执行多个参数化查询,以查询一组相同的记录。该方法接受两个参数,一个包含SQL语句的字符串和一个包含参数元组的可迭代对象。
以下是一个使用cursor.executemany()
执行参数化查询的示例:
mycursor = mydb.cursor()
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
('Peter', 'Lowstreet 4'),
('Amy', 'Apple st 652'),
('Hannah', 'Mountain 21'),
('Michael', 'Valley 345'),
('Sandy', 'Ocean blvd 2'),
('Betty', 'Green Grass 1'),
('Richard', 'Sky st 331'),
('Susan', 'One way 98'),
('Vicky', 'Yellow Garden 2'),
('Ben', 'Park Lane 38'),
('William', 'Central st 954'),
('Chuck', 'Main Road 989'),
('Viola', 'Sideway 1633')
]
mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "记录插入成功。")
上述代码中,使用了一个sql
变量来存储SQL语句,其中%s
表示需要插入的值所在的元组。之后在使用mycursor.executemany()
方法时,参数val
对应了需要插入到数据库中的多个元组。
总结
这是Python中MySQL中in参数化的攻略,可以有效提高代码的可读性和安全性。当传入的参数量较大时,可以使用execute()
方法。当传入的参数量较少,需要多次查询时,可以使用executemany()
方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python mysql中in参数化说明 - Python技术站