2015-01-28 1 views
0

Я пытаюсь вставить запись в базу данных sqlite, используя именованные параметры в python (с модулем sqlite3). Значения, которые я хочу вставить, находятся в словаре, но ключи словаря могут содержать тире, например {'request-id': 100, 'year': '2015'}. Я пытаюсь выполнить следующие действия:python sqlite с именем параметр, содержащий dash

import sqlite3 
conn = sqlite3.connect('database.db') 
cursor = conn.cursor() 
cursor.execute('''CREATE TABLE IF NOT EXISTS requests (request_id text, year text)''') 
query = '''INSERT INTO requests (request_id, year) VALUES (:request-id, :year)''' 
cursor.execute(query, {'request-id': 100, 'year': '2015'}) 
conn.commit() 
conn.close() 

Я получаю эту ошибку во время оператора вставки:

sqlite3.OperationalError: no such column: id 

Похоже, черточки не очень хорошо приняты в качестве именованных параметров.

Существует много обходных решений для этого, например, создание нового словаря, в котором тире в ключах заменяются символами подчеркивания, но я хотел бы знать, могу ли я использовать какую-либо технику экранирования или что-то еще, чтобы избежать этого. не

Спасибо за вашу помощь

+1

Ваш 'столбец names' не совпадают тоже. Это 'date' в' create' и 'year' в' insert'. –

+0

Нет, я думаю, здесь 'id' ссылается на непоследовательное использование' date' при создании таблицы и 'year' после этого. – ZdaR

+0

Извините, это была ошибка вырезания и вставки, фактическая таблица содержит столбец «год». Я отредактировал вопрос соответствующим образом. благодаря – Daniele

ответ

0

В заявлении documentation for sqlite3_bind_* указано, что имена параметров должны состоять из буквенно-цифровых символов и не указывать способ их устранения.

Ваш запрос, вероятно, быть разобран как :request - id, т.е. :request минус id, а так как нет такого столбца id, SQLite выдает ошибку.

(Также, как Prerak Sola указывает, вы создаете таблицу с date колонки, но попробуйте вставить в year колонку, которая не существует.)

0

имена параметров SQL не имеют цитирование или выхода механизма; вы должны использовать те же правила, что и для некотируемого идентификатора.

 Смежные вопросы

  • Нет связанных вопросов^_^