python sqlite 3:回滚到保存点失败
在上面的代码片段中,它表示“回滚到保存点失败”。 出了什么问题 编辑: 我更改了代码,如下所示,并收到错误消息python sqlite 3:回滚到保存点失败,python,sqlite,Python,Sqlite,在上面的代码片段中,它表示“回滚到保存点失败”。 出了什么问题 编辑: 我更改了代码,如下所示,并收到错误消息 def rollback_savepoint(self): try: self.db.execute("rollback to savepoint pt;") except: print "roll back to save point failed" else: print "Roll back to save
def rollback_savepoint(self):
try:
self.db.execute("rollback to savepoint pt;")
except:
print "roll back to save point failed"
else:
print "Roll back to save point. Done"
错误
self.db.execute("savepoint pt;")
print "Save point created"
self.cursor.execute("insert into STK values(33)")
self.db.execute("rollback to savepoint pt;")
已创建保存点
回溯(最近一次呼叫最后一次):
文件“open_db.py”,第77行,在
obj1.保存_点()
文件“open_db.py”,第63行,保存点
self.db.execute(“回滚到保存点pt;”)
sqlite3.2错误:没有这样的保存点:pt
永远不要捕获未处理的异常。让它升高,这样您就可以得到有用的错误消息和回溯
例如:
Save point created
Traceback (most recent call last):
File "open_db.py", line 77, in <module>
obj1.save_point()
File "open_db.py", line 63, in save_point
self.db.execute("rollback to savepoint pt;")
sqlite3.OperationalError: no such savepoint: pt
使其工作的行是db.isolation\u level=None。如果你把它注释掉,它就会像你的错误一样破裂。我尝试过使用所有记录的值“延迟”、“立即”和“独占”,所有结果都是错误的。永远不要捕获您未处理的异常。让它升高,这样您就可以得到有用的错误消息和回溯 例如:
Save point created
Traceback (most recent call last):
File "open_db.py", line 77, in <module>
obj1.save_point()
File "open_db.py", line 63, in save_point
self.db.execute("rollback to savepoint pt;")
sqlite3.OperationalError: no such savepoint: pt
使其工作的行是db.isolation\u level=None。如果你把它注释掉,它就会像你的错误一样破裂。我尝试过使用所有记录的值“延迟”、“立即”和“独占”,所有结果都是错误的。永远不要捕获未处理的异常。让它升高,这样您就可以得到有用的错误消息和回溯。obj1.rollback_savepoint()文件“open_db.py”,在rollback_savepoint self.db.execute(“rollback to savepoint pt;”)sqlite3.OperationalError:没有这样的savepoint:ptsave point代码段不会产生任何错误def save(self):self.db.execute(“savepoint pt;”)打印“save point created”永远不要捕获您未处理的异常。让它升高,这样您就可以得到有用的错误消息和回溯。obj1.rollback_savepoint()文件“open_db.py”,在rollback_savepoint self.db.execute(“rollback to savepoint pt;”)sqlite3.OperationalError:没有这样的savepoint:ptsave point代码段不会产生任何错误def save(self):self.db.execute(“savepoint pt;”)打印“save point created”谢谢,删除异常处理后,我得到了这个sqlite3.OperationalError:没有这样的保存点:pt如何在使用异常处理程序时打印错误?类似于python的perror()的东西是可用的??是的,有-但是为什么?错误已经被自动打印,捕获它只是复制代码好的。你看到上面的错误消息了吗?这里有什么问题?保存点工作正常,回滚会产生错误消息。@lakshmipathi:是的,我已经用我发现的信息编辑了我的答案。谢谢,在删除异常处理后,我得到了这个sqlite3。OperationalError:没有这样的保存点:pt如何在使用异常处理程序时打印错误?类似于python的perror()的东西是可用的??是的,有-但是为什么?错误已经被自动打印,捕获它只是复制代码好的。你看到上面的错误消息了吗?这里有什么问题?“保存积分”功能正常,回滚会产生错误消息。@拉克希米帕蒂:是的,我已经用我发现的信息编辑了我的答案
import sqlite3
from tempfile import NamedTemporaryFile as NF
import os
f = NF(suffix='.db', delete=False).name
db = sqlite3.connect(f)
try:
db.execute('CREATE TABLE foo (id INTEGER PRIMARY KEY, data VARCHAR)')
db.isolation_level = None
db.execute('INSERT INTO foo (data) values (?)', ('hello',))
db.execute('INSERT INTO foo (data) values (?)', ('world',))
db.execute("savepoint pt;")
db.execute('INSERT INTO foo (data) values (?)', ('bah',))
db.execute('INSERT INTO foo (data) values (?)', ('goodbye world',))
db.execute("rollback to savepoint pt;")
db.execute('INSERT INTO foo (data) values (?)', ('peace',))
assert list(db.execute('select * from foo')) == [(1, 'hello'),
(2, 'world'),
(3, 'peace')]
finally:
db.close()
os.remove(f)