python - 使用 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()
解决方案
不要连接 csv 数据。使用参数化查询。在您的字符串中使用%s
,然后传递附加变量:
cursor.execute('select team from users.teamdetails where p_id = %s', (queryPID,))
文本的连接使您的应用程序容易受到 SQL 注入的攻击。 https://www.psycopg.org/docs/usage.html
推荐阅读
- c# - 在 ValidationContext 的 ctor 中使用 Filter 和 ValidatorAttribute 会导致 System.ArgumentNullException
- php - 将mysql数据添加到HTML表中
- c# - Get inner JSON content as string without deserializing
- google-cloud-platform - 无法将 350 GB 数据从一个存储桶复制到谷歌云中的另一个存储桶
- unity3d - 建造一堵提高速度统一的墙
- python - 如何避免在 Django 中使用 context_processors.py 时在登录页面上请求用户?
- wordpress - 来自 WP REST API 的类别的 Vuejs vfor 循环中的 SVG
- oracle - 一个多小时前在 Apex Oracle 中创建的不同颜色记录
- json - 按值排序json数组jq bash
- java - 根据孩子的领域对抽象对象列表进行排序