2013-07-29 5 views
0

любая идея, что я делаю неправильно?python sqlite3 insert command

Я создаю таблицу под названием General:

conn = sqlite3.connect(self.dbLocation) 
    c = conn.cursor()   
    sql = "create table if not exists General (id integer NOT NULL,current char[20] NOT NULL,PRIMARY KEY (id))" 
    c.execute(sql) 
    c.close() 
    conn.close() 

Я тогда с помощью макс (ID), чтобы увидеть, если таблица пуста. Если это так, я создаю таблицу под названием Current1 и вставляю строку в General (id, 'Current1'). идентификатор автоинкремент целого числа:

self.currentDB = "Current1" 
    self.currentDBID = "1" 
    #create the table 
    sql = "create table %s (id integer NOT NULL,key char[90] NOT NULL,value float NOT NULL,PRIMARY KEY (id))" % (str(self.currentDB)) 
    c.execute(sql) 
    c.close() 
    conn.close() 
    conn = sqlite3.connect(self.dbLocation) 
    c = conn.cursor() 
    sql = "insert into General(current) values('%s')" % (str(self.currentDB)) 
    print "sql = %s" % (str(sql)) ---> *sql = insert into General(current) values('Current1')* 
    c.execute(sql) 
    print "executed insert Current" 
    c.execute ("select max(id) from General") 
    temp = c.next()[0] 
    print "temp = %s" % (str(temp)) ---> *temp = 1* 
    c.close() 
    conn.close() 

Проблема заключается в том, что если открыть базу данных, я не нахожу ни одной строки в общей таблице. Создается таблица Current1, но инструкция insert в General, похоже, ничего не делает. Что я делаю не так? Благодарю.

ответ

1

Вы должны зафиксировать изменения перед закрытием соединения:

conn.commit() 

проверки пример в документации: http://docs.python.org/2/library/sqlite3.html

+0

Только что нашел ответ на другой странице, прежде чем я обновил этот вариант и нашел ваши ответы. Вы правы, я также попытался совершить с переменной c, но не работал ... он должен быть подключен. Большое спасибо :) Отметит ваш как правильный ответ, так как ваш первый, хотя @Maxime Lorant тоже прав! – user2623934

0

Или вы можете использовать соединение в качестве контекста менеджера: http://docs.python.org/2/library/sqlite3.html#using-the-connection-as-a-context-manager

Объекты подключения могут использоваться в качестве менеджеров контекста, которые автоматически совершают транзакции или откатываются. В случае исключения транзакция откатывается; в противном случае сделка совершается

Пример:

import sqlite3 
conn = sqlite3.connect('current') 
with conn: 
    conn.execute("create table if not exists General (id integer NOT NULL,current char[20] NOT NULL,PRIMARY KEY (id))") 
    conn.execute("insert into General(current) values('{0}')".format("some data")) 

with conn: 
    q = conn.execute("select max(id) from General") 
q.fetchone()[0] 
0

Вы должны вносить изменения в базу данных с

conn.commit() 

это запишет на изменения дисков, которые вы сделали в вашей базе данных. Если вы закроете свою базу данных, не выполнив ее, вы потеряли свою модификацию (INSERT/UPDATE/DELETE)