当我使用isql进行查询时,我收到以下消息和查询块。
数据库foo中的事务日志几乎已满。您的交易将被暂停,直到日志中有可用空间为止。
当我从Python做同样的事情时:
cursor.execute(sql)
查询阻止,但我希望看到此消息。
我试过了:
Sybase.set_debug(sys.stderr)
connection.debug = 1
我正在使用:
编辑:问题是,“如何在python程序中捕获此警告消息?”
答案 0 :(得分:1)
好问题,我不确定我能否完全回答。以下是一些想法。
Sybase.py使用日志记录。确保您使用它。为了“阻止”退出,我会这样做:
import logging
logging.basicConfig(level = logging.INFO,
format = "%(asctime)s %(levelname)s [%(filename)s] (%(name)s) %(message)s",
datefmt = "%H:%M:%S", stream = sys.stdout)
log = logging.getLogger('sybase')
log.setLevel(logging.DEBUG)
显然(为什么超出我?)要在Sybase.py中使用它,你需要设置一个全局DEBUG=True
(见第38行)
但是如果我们看一下def execute
,我们可以看到(正如你指出的那样)它是阻塞的。我们会回答你的问题。你不会得到任何回报,因为它阻止了它。那么你如何解决这个问题 - 编写一个非阻塞的执行方法;)examples / timeout.py中有一些提示。显然其他人已经对此表示不满,但还没有真正修复它。
我知道这可能没有帮助,但我花了15分钟看 - 我至少应该告诉你我发现了什么......你会认为execute
会给你一些result
- 等等第707行的结果值是什么?
while 1:
status, result = self._cmd.ct_results()
if status != CS_SUCCEED:
break
如果status!= CS_SUCCEED(我假设你的情况是True),你能看到“结果”等于什么?我想知道他们是否只是将结果提升为异常?
答案 1 :(得分:-1)
原因很明显,事务日志已满,你可以在sybase MDA表monSysStatement中查看blocikng查询。这里你可以检查sql语句哪个占用高Io,时间,行数影响等。
答案 2 :(得分:-1)
您的查询可能很大,这会溢出事务日志(例如,您正在插入大型二进制文件)。或者,如果这是一个选项,您可能不会经常截断您的事务日志。
在运行时期间,您将需要一个捕获异常错误的except语句。