在 Python 中与 MySQL 交互时,使用 mysql-connector-python 可以方便地进行数据库查询、应用筛选条件,并且通过使用参数化查询防止 SQL 注入。下面是如何进行这些操作的详细指南和示例代码。
mysql-connector-python
首先,确保你已经安装了 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岁的员工:
WHERE
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
conn
fetch_employees_by_age
main
通过这些步骤和示例代码,你可以在 Python 中高效、安全地进行 MySQL 数据库查询、应用筛选条件,并防止 SQL 注入。
原文链接:codingdict.net