知道我做错了什么?
我正在创建一个名为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的insert语句似乎没有做任何事情。我究竟做错了什么?感谢。
答案 0 :(得分:1)
答案 1 :(得分: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]
答案 2 :(得分:0)
您需要使用
在数据库中提交更改conn.commit()
这将写入您在数据库中所做的磁盘更改。如果在未执行此操作的情况下关闭数据库,则会丢失修改(INSERT / UPDATE / DELETE)