我正在尝试访问特定列中某一行的数据,但是该函数返回的是列名而不是行值。我注意到,如果使用星号(*)
选择所有内容,则该函数将返回所有值,而不是键,并且如果我手动键入要访问的列的名称,它也将起作用。 / p>
函数_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': ''}
答案 0 :(得分:2)
占位符(即使用?
)不支持用于列名或表名-仅用于值。所以发生的事情是您的查询字面上变成了:
SELECT 'accuracy' FROM places WHERE postal_code = '1234';
这就是为什么要获取列名而不是存储在行中的值的原因。
您需要自行设置字符串的格式以包含列名,但是请注意,此方法容易受到SQL注入的影响,因此您应确保列名的字典受信任并包含“好”值。
示例:
cur.execute("SELECT {} FROM places WHERE postal_code = ?".format(key_name), [zipcode])