Запрос к базе данных не возвращает значение строки, а возвращает имя столбца - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь получить доступ к данным строки в определенном столбце, но функция возвращает имя столбца вместо значения строки. Я замечаю, что если я использую звезду (*), чтобы выбрать все, функция возвращает все значения, а не ключи, и если я вручную ввожу имя столбца, к которому пытаюсь получить доступ, он тоже работает.

В функции _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 голосов
/ 04 сентября 2018

Заполнители (то есть с использованием ?) не поддерживаются для имен столбцов или таблиц - только для значений. Так что происходит, что ваш запрос становится буквально:

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

, поэтому вы получаете имя столбца вместо значения, хранящегося в строке.

Вам нужно будет самостоятельно отформатировать строку, чтобы она содержала имя столбца, но учтите, что этот метод уязвим для внедрения SQL, поэтому вам следует убедиться, что ваш словарь имен столбцов является доверенным и содержит «хорошие» значения.

Пример:

cur.execute("SELECT {} FROM places WHERE postal_code = ?".format(key_name), [zipcode])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...