2015-02-12 5 views
0

Проблема:Python sqlite3 вставки с Params

У меня есть проблема с вставкой данных в SQLite с питоном. В этот момент я новичок в python, так что это должна быть ошибка начинающего.

Ошибка:

OperationalError: unrecognized token: "{"

То, что я пытался:

Я прочитал много учебников и пробовал много вариантов, как показано ниже в коде examples.But я не могу получить эту работу без ошибок по какой-то причине.

Некоторые примеры:

cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES ({tmdb_id}, {name}, {year})".format(
     tmdb_id=str(data['id']), name=str(data['title']), year=str(data['release_date']).split('-')[0])) 

cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES ({tmdb_id}, {name}, {year})", { 
     "tmdb_id": str(data['id']), "name": str(data['title']), "year": str(data['release_date']).split('-')[0]}) 
    conn.commit() 

Вопрос:

Может кто-то помочь мне вставить строку правильно с sqlite3 в вещий образом?

+1

Специфическая ошибка пропускает ' ** ', чтобы распаковать словарь во втором примере. Однако прочитайте https://docs.python.org/2/library/sqlite3.html и ** не ** используйте 'str.format' для интерполяции переменных! – jonrsharpe

+0

Я прочитал около 10 учебников, но не документы. Спасибо – Dany

+0

Добавить как ответ пожалуйста. Поэтому я могу принять – Dany

ответ

3

Более вещий способ есть sqlitic способ

Из docs

Instead, use the DB-API’s parameter substitution. Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method.

Один из ваших примеров может быть решена с помощью

values = (data['id'],data['title'],data['release_date']) 
cursor.execute("INSERT INTO wanted_movie (tmdb_id, name, year) VALUES (?, ?, ?)",values) 
+1

Как упоминается спецификация API Python Database API v2.0, «http://www.python.org/dev/peps/pep» может быть найден заполнитель из '' paramstyle' -0249/# paramstyle) global, то есть 'sqlite3.paramstyle' -' 'qmark''. –

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