我编写了以下代码,它显示了sqlite3.OperationalError:数据库被锁定错误.任何调试帮助将非常感激.
基本上我试图将数据从table1复制到table2,并根据某些其他应用程序发生在table1上的更改将数据插入到table2中.
看起来我错过了一些部分.
- import sqlite3
- conn = sqlite3.connect("/home/sid/.Skype/testmasterut/main.db")
- cursor = conn.cursor()
- createLogTablesql = """create table IF NOT EXISTS sid_log as select id as "s_id",author as "s_author",timestamp as "s_timestamp",edited_by as "s_editedby",edited_timestamp as "s_edited_timestamp",body_xml as "s_body_xml" from Messages"""
- cursor.execute(createLogTablesql)
- conn.commit()
- print "Table to save the old messages has been created"
- selectLog = """ select * from sid_log """
- original_table = cursor.execute(selectLog)
- cursor2 = conn.cursor()
- cursor3 = conn.cursor()
- cursor4 = conn.cursor()
- InsertTest = """ insert or ignore into sid_log (s_id,s_author,s_timestamp,s_editedby,s_edited_timestamp,s_body_xml)
- select id,author,timestamp,edited_by,edited_timestamp,body_xml from Messages where id not in (select s_id from sid_log where s_id = id) and edited_by is NULL and edited_timestamp is NULL
- """
- EditedTest = """ select * from Messages where id in (select s_id from sid_log where s_id = id) and edited_by is not NULL and edited_timestamp is not NULL"""
- conn.close()
- while True:
- conn2 = sqlite3.connect("/home/sid/.Skype/testmasterut/main.db",timeout=3)
- conn2.execute(InsertTest)
- print "Total number of rows changed:",conn.total_changes
- EditedTest2 = """ select * from Messages where id in (select s_id from sid_log where s_id = id) and edited_by is not NULL and edited_timestamp is not NULL"""
- edited_list = conn2.execute(EditedTest2)
- conn2.commit()
- conn2.close()
- # for row in edited_list:
- # queryString = "SELECT * FROM sid_log WHERE s_id IN (%s)" % str(row[0])
- # original_message = conn.execute(queryString)
- # for org_row in original_message:
- # print "Message edited from",org_row[5],"to",row[5]
编辑
以下是追溯
- Traceback (most recent call last):
- File "try2.py",line 28,in <module>
- conn2.execute(InsertTest)
- sqlite3.OperationalError: database is locked