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

データベースの変更をコミットする必要があります

conn.commit()

これにより、データベースで行ったディスクの変更が書き込まれます。実行せずにデータベースを閉じると、変更内容が失われます (INSERT/UPDATE/DELETE)

于 2013-07-29T15:02:28.257 に答える
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 に答える