查询数据库不返回行值,而是返回列名

时间:2018-09-04 00:01:08

标签: python-3.x sqlite flask

我正在尝试访问特定列中某一行的数据,但是该函数返回的是列名而不是行值。我注意到,如果使用星号(*)选择所有内容,则该函数将返回所有值,而不是键,并且如果我手动键入要访问的列的名称,它也将起作用。 / 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': ''}

1 个答案:

答案 0 :(得分:2)

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

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

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

您需要自行设置字符串的格式以包含列名,但是请注意,此方法容易受到SQL注入的影响,因此您应确保列名的字典受信任并包含“好”值。

示例:

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