2013-06-07 2 views
1

я получаю сообщение об ошибке при вводе значений в базе данных:Добавление в базу данных SQlite Python

values = [] 
for dictionary in dictionaries: 
     for element in keys: 
      if element in cols: 
       curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,\ 
           ?,?,?,?,?,?,?,?,?,?,?,?,?)', dictionary[element]) 
       #values.append(dictionary[element]) 
      else: 
       curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,\ 
           ?,?,?,?,?,?,?,?,?,?,?,?,?)', 'NA') 
       #values.append('NA') 

     #curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', tuple(values)) 


Error: OperationalError: near "?": syntax error 

В принципе, я обходе через каждый словарь доступа определенных значений и пытается ввести их в базу данных. Я проверяю, находится ли «ключ» для словаря внутри другого списка, если он есть, затем добавьте некоторое значение в базу данных, иначе добавьте «NA».

Я представил, как я определил таблицу в базе данных:

curs.execute("CREATE TABLE Root_table(\ 
       Id INTEGER PRIMARY KEY, 'a' TEXT, 'b' TEXT,\ 
       'c' TEXT, 'd' TEXT, 'e' TEXT, 'f' TEXT, 'g' TEXT, 'h' TEXT,\ 
       'i' TEXT, 'j' TEXT,'k' TEXT, 'l' TEXT, 'm' TEXT, 'n' TEXT,\ 
       'o' TEXT, 'p' TEXT, 'q' TEXT, 'r' TEXT, 's' TEXT, 't' TEXT,\ 
       'u' TEXT, 'v' TEXT, 'w' TEXT, 'x' TEXT, 'y' TEXT, 'z' TEXT)") 

Общее количество вопросительных знаков ? в curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', dictionary[element]) составляет 25, в то время как есть 26 столбцов в таблице (первый является ID элемента , который должен автоинкремент в соответствии с количеством строк).

+0

Вы можете использовать многострочные строковые литералы '«»«несколько строк»«»' или используйте неявное строковое литералирование конкатенации: '(« одна строка »...« другое »)' вместо '\\' в конце. – jfs

ответ

1

Неправильный текст. Вам нужно добавить values к вашему запросу, и потому, что вы не предоставлять данные для всех столбцов, необходимо указать, какие:

import sqlite3 
c = sqlite3.connect(':memory:') 
c.execute("create table mytable (_id integer primary key, a, b)") 
c.execute("insert into mytable (a,b) values (?, ?)", (2,3)) 
c.execute('select * from mytable').fetchall() 
# [(1,2,3)] 
+0

Если я сохранил записи в значении и выполнил это: 'curs.execute ('INSERT INTO Root_table (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?) ', кортеж (значения)) ', я все равно получаю сообщение об ошибке (хотя это дает все данные для каждого столбца). –

+1

Попробуйте 'curs.execute ('INSERT INTO Root_table (' ) значения (?,?,?,?,?,?,?,?,?,?,?,?,?,? ,?,?,?,?,?,?,?) ', кортеж (значения)) ' –

+0

Я получаю ошибку' 25 значений для 26 столбцов' с описанным методом^, Странно, что я выполняю 'print len ​​(values)' прямо перед 'curs.execute (...)', и я вижу 26. –

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