在 Python 中与 MySQL 交互时,使用 mysql-connector-python
可以方便地进行数据库查询、应用筛选条件,并且通过使用参数化查询防止 SQL 注入。下面是如何进行这些操作的详细指南和示例代码。
首先,确保你已经安装了 mysql-connector-python
:
pip install mysql-connector-python
建立连接并创建一个游标来执行查询:
import mysql.connector
# 建立连接
conn = mysql.connector.connect(
host='localhost',
user='yourusername',
password='yourpassword',
database='yourdatabase'
)
cursor = conn.cursor(dictionary=True)
基本查询可以通过执行简单的 SQL 语句来实现。例如:
query = "SELECT * FROM employees"
cursor.execute(query)
results = cursor.fetchall()
for row in results:
print(row)
可以在 SQL 语句中使用 WHERE
子句来筛选数据。例如,查询年龄大于 30 岁的员工:
query = "SELECT * FROM employees WHERE age > 30"
cursor.execute(query)
results = cursor.fetchall()
for row in results:
print(row)
为了防止 SQL 注入,应使用参数化查询。参数化查询可以确保用户输入的值被正确转义,从而防止恶意代码的执行。
使用参数化查询来查询特定年龄段的员工:
age_threshold = 30
query = "SELECT * FROM employees WHERE age > %s"
cursor.execute(query, (age_threshold,))
results = cursor.fetchall()
for row in results:
print(row)
以下是一个完整的示例,包括连接数据库、执行参数化查询、防止 SQL 注入,以及关闭连接的代码:
import mysql.connector
def connect_to_db():
# 连接到数据库
conn = mysql.connector.connect(
host='localhost',
user='yourusername',
password='yourpassword',
database='yourdatabase'
)
return conn
def fetch_employees_by_age(cursor, age_threshold):
# 使用参数化查询防止 SQL 注入
query = "SELECT * FROM employees WHERE age > %s"
cursor.execute(query, (age_threshold,))
return cursor.fetchall()
def main():
# 连接到数据库
conn = connect_to_db()
cursor = conn.cursor(dictionary=True)
# 查询年龄大于 30 岁的员工
age_threshold = 30
results = fetch_employees_by_age(cursor, age_threshold)
for row in results:
print(row)
# 关闭游标和连接
cursor.close()
conn.close()
if __name__ == "__main__":
main()
connect_to_db
函数连接到 MySQL 数据库,并返回连接对象 conn
。fetch_employees_by_age
函数执行参数化查询,防止 SQL 注入。main
函数中调用查询函数,并输出结果。通过这些步骤和示例代码,你可以在 Python 中高效、安全地进行 MySQL 数据库查询、应用筛选条件,并防止 SQL 注入。
原文链接:codingdict.net