python sqlite3 insert命令

时间:2013-07-29 14:29:32

标签: python insert sqlite

知道我做错了什么?

我正在创建一个名为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语句似乎没有做任何事情。我究竟做错了什么?感谢。

3 个答案:

答案 0 :(得分:1)

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

conn.commit()

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

答案 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)