首页 > 解决方案 > 使用 python 在 db 上针对不同变量运行选择查询

问题描述

我正在使用 python 建立数据库连接并读取 csv 文件。对于 csv 中的每一行,我想运行一个 PostgreSQL 查询并获取与读取的每一行相对应的值。

数据库连接和文件读取工作正常。此外,如果我对硬编码值运行查询,那么它工作正常。但是,如果我尝试使用 python 变量对 csv 文件中的每一行运行查询,那么我没有得到正确的值。

cursor.execute("select team from users.teamdetails where p_id = '123abc'")

上面的查询工作正常。但是当我尝试从 csv 文件中获取多个值时,我没有得到正确的值。

cursor.execute("select team from users.teamdetails where p_id = queryPID")

参考完整代码:

import psycopg2
import csv


conn = psycopg2.connect(dbname='', user='', password='', host='', port='')
cursor = conn.cursor()

with open('playerid.csv','r') as csv_file:
    csv_reader = csv.reader(csv_file)
    for line in csv_reader:
        queryPID = line[0]
        cursor.execute("select team from users.teamdetails where p_id = queryPID")
        team = cursor.fetchone()
        print (team[0])

conn.close()

标签: pythonpostgresql

解决方案


不要连接 csv 数据。使用参数化查询。在您的字符串中使用%s,然后传递附加变量:

cursor.execute('select team from users.teamdetails where p_id = %s', (queryPID,))

文本的连接使您的应用程序容易受到 SQL 注入的攻击。 https://www.psycopg.org/docs/usage.html


推荐阅读