Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入


在 Python 中与 MySQL 交互时,使用 mysql-connector-python 可以方便地进行数据库查询、应用筛选条件,并且通过使用参数化查询防止 SQL 注入。下面是如何进行这些操作的详细指南和示例代码。

安装 MySQL 连接器

首先,确保你已经安装了 mysql-connector-python

pip install mysql-connector-python

连接到 MySQL 数据库

建立连接并创建一个游标来执行查询:

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 注入

为了防止 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()

详细说明

  1. 连接到数据库:使用 connect_to_db 函数连接到 MySQL 数据库,并返回连接对象 conn
  2. 参数化查询:使用 fetch_employees_by_age 函数执行参数化查询,防止 SQL 注入。
  3. 执行查询和输出结果:在 main 函数中调用查询函数,并输出结果。
  4. 关闭连接:在查询完成后,关闭游标和数据库连接。

最佳实践

  • 使用参数化查询:始终使用参数化查询来防止 SQL 注入。
  • 处理异常:在实际应用中,添加异常处理以处理可能发生的数据库连接错误或查询错误。
  • 使用连接池:对于高并发应用,考虑使用连接池来管理数据库连接,提高性能。

通过这些步骤和示例代码,你可以在 Python 中高效、安全地进行 MySQL 数据库查询、应用筛选条件,并防止 SQL 注入。


原文链接:codingdict.net