0

知道我做错了什么吗?

我正在创建一个名为 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()

然后我使用 max(id) 来查看表是否为空。如果是,我创建一个名为 Current1 的表并在 General (id, 'Current1') 中插入一行。id 是自增整数:

    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()

问题是如果我打开数据库,我在 General 表中找不到任何行。Current1 表正在创建,但插入到 General 中的语句似乎没有做任何事情。我究竟做错了什么?谢谢。

4

3 回答 3

1

您必须在关闭连接之前提交更改:

conn.commit()

检查文档中的示例:http: //docs.python.org/2/library/sqlite3.html

于 2013-07-29T14:58:59.453 回答
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]
于 2013-07-29T15:01:30.490 回答
0

您需要在数据库中提交更改

conn.commit()

这将写入您在数据库中所做的磁盘更改。如果您不这样做就关闭数据库,您将丢失您的修改(INSERT/UPDATE/DELETE)

于 2013-07-29T15:02:28.257 回答