Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python sqlite 3:回滚到保存点失败_Python_Sqlite - Fatal编程技术网

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)