2014-01-30 4 views
-1

У меня есть таблица на python, которую я хочу преобразовать в формат .db. Однако, когда я запускаю свой код в IDLE, таблица создается с заголовками, но данные не вставлены. Это мой код:Вставка данных в базу данных sql из python

import sqlite3 

conn = sqlite3.connect('test.db') 

c = conn.cursor() 

kampData = [ 
(1,12,'','','Everton','Liverpool',2.9,3.3,2.63,0,0), 
(2,12,'','','Fulham','Swansea City',3.4,3.4,2.3,0,0), 
(3,12,'','','Hull City','Crystal Palace',1.91,3.5,4.75,0,0) 
] 

def tableCreate():  
    c.execute("CREATE TABLE TABLE(ID INT, Round INT, Date TEXT, Time TEXT, Home TEXT, Away TEXT, O1 REAL, OX REAL, O2 REAL, ScoreHome INT, ScoreAway INT)") 

def insertData(): 
    i = 0 
    while i < len(kampData): 
     c.execute("INSERT INTO TEST1 (ID, Round, Date, Time, Home, Away, O1, OX, O2, ScoreHome, ScoreAway) VALUES (?,?,?,?,?,?,?,?,?,?,?)", 
       (kampData[i][0],kampData[i][1],kampData[i][2],kampData[i][3],kampData[i][4],kampData[i][5],kampData[i][6],kampData[i][7],kampData[i][8],kampData[i][9],kampData[i][10],)) 
    i = i + 1 
+0

Вы не * призывающую * либо функцию здесь либо. Это * все * ваш код? –

ответ

1

Ваш код не вызывает insertData(), а функция является чрезмерно многословным. И последнее, но не менее важное: вы не совершаете транзакцию.

Используйте c.executemany(), чтобы вставить всю свою структуру за один раз; нет необходимости индексировать каждый столбец:

def insertData(): 
    c.executemany("INSERT INTO TEST1 (ID, Round, Date, Time, Home, Away, O1, OX, O2, ScoreHome, ScoreAway) VALUES (?,?,?,?,?,?,?,?,?,?,?)", 
       kampData) 

Вы также должны были бы не совершать транзакции:

conn.commit() 
+2

Я поставил 'commit()' это ключ здесь. –

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