2016-08-11 4 views
0

Я не могу получить executemany для работы. У меня не было никаких ошибок. Но значения не были вставлены. Ниже приведен небольшой пример: в табличных ценах уже есть несколько столбцов и 3 строки. Я добавил новую колонку t и вставил значения в vals в t.Как вставить список значений в столбец sqlite3 с помощью python?

vals = [(1,), (2,), (3,)] 
cursor.execute("ALTER TABLE prices ADD COLUMN t REAL") 
cursor.executemany("INSERT INTO TABLE prices(t) VALUES(?)", vals) 
data = cursor.execute("SELECT id, t FROM prices") 

for i in data: 
    print i 

я

(1, None) 
(2, None) 
(3, None) 
+0

Ваш синтаксис 'insert' кажется неверным. Скопируйте-вставьте короткую ** ** полную ** программу, которая демонстрирует ошибку. См. [Mcve] для получения дополнительной информации. –

+0

Когда я исправляю вашу синтаксическую ошибку и добавляю соответствующий код оболочки, я не могу воспроизвести ваш результат. См. [Здесь] (http://ideone.com/vmVw0s), чтобы ваш код работал отлично. –

ответ

0

это does't выглядеть, как вы вставляя значения в столбце «t'.i'm предполагается, что ваш стол имеет 2 колонки (идентификатор, T) Check ваш список сверху, который имеет

vals = [(1,), (2,), (3,)] 

возможно, в этом проблема. Не могли бы вы подробнее рассказать?

+0

На самом деле, мой стол имеет более двух столбцов. Столбец '' 't''' является последним. Я сказал это в своем посте. – tnabdb

0

Фактически вы успешно вставили значения в таблицу. Проблема в том, что они являются новыми строками внизу. Если вы сделаете выборку, у вас будет (col1, col2, ..., none) . . . (нет, нет, ..., 1)

Это потому, что команда INSERT INTO добавляет строки.

Пример Роба работал, потому что у него не было существующих столбцов в таблице.

Вам нужно обновить с ИНЕКЕ: хотя это медленно, и я хотел бы, чтобы ускорить

add_col_str = "ALTER TABLE orig ADD COLUMN {} INT".format(col_name) 
db.execute(add_col_str) 

for i in range(len(df)): 
    add_data_str = "UPDATE orig SET {} =(?) WHERE orig_id=(?)".format(col_name) 
    value = int(df.values[i]) 
    idx = df.index[i] 
    db.execute(add_data_str, (value, idx)) 
# commit 
db.commit() 
Смежные вопросы