gpt4 book ai didi

python-3.x - 对数据库的查询不返回行值,而是返回列名

转载 作者:行者123 更新时间:2023-12-03 08:09:17 25 4
gpt4 key购买 nike

我正在尝试访问特定列中行的数据,但该函数返回的是列名而不是行值。我注意到如果我使用星号 (*)要选择所有内容,该函数会返回所有值,而不是键,如果我手动输入要访问的列的名称,它也可以工作。

在函数 _dict是我作为参数发送的字典,它的键与数据库中的列名相同,所以我要做的是每次循环更改为不同的键时,将其转换为字符串,然后选择数据库中该列名的值。

def query(_dict, zipcode):
# Connection to database
conn = sqlite3.connect('mashup.db')
# Creation of cursor
cur = conn.cursor()
# Make query to database
for key in _dict:
key_name = str(key)
cur.execute("SELECT ? FROM places WHERE postal_code = ?",[key_name,zipcode])
db_query = cur.fetchone()
_dict[key] = db_query[0]

return _dict

我也试过 cur.fetchone()fetchall()但我得到了同样的结果。

以防万一,这是我作为参数传递的字典:
# Creation of the dict of places
places_dict = {
'accuracy': '',
'admin_code1': '',
'admin_code2': '',
'admin_code3': '',
'admin_name1': '',
'admin_name2': '',
'admin_name3': '',
'country_code': '',
'latitude': '',
'longitude': '',
'place_name': '',
'postal_code': ''}

最佳答案

列名或表名不支持占位符(即使用 ? ) - 仅适用于值。所以发生的事情是你的查询变成了字面意思:

SELECT 'accuracy' FROM places WHERE postal_code = '1234';

这就是为什么您获取列名而不是存储在行中的值的原因。

您需要自己格式化字符串以包含列名,但请注意,此方法易受 SQL 注入(inject)攻击,因此您应确保列名字典受信任并包含“好”值。

例子:
cur.execute("SELECT {} FROM places WHERE postal_code = ?".format(key_name), [zipcode])

关于python-3.x - 对数据库的查询不返回行值,而是返回列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com