查询阻止时如何捕获此警告消息?

Edd*_*onk 5 python sybase-ase

当我使用isql进行查询时,我得到以下消息和查询块.

数据库foo中的事务日志几乎已满.您的事务将暂停,直到日志中的空间可用.

当我从Python做同样的事情时:

cursor.execute(sql)
Run Code Online (Sandbox Code Playgroud)

查询阻止,但我想看到此消息.

我试过了:

Sybase.set_debug(sys.stderr)
connection.debug = 1
Run Code Online (Sandbox Code Playgroud)

我正在使用:

  • 蟒蛇,SYBASE,0.40pre1
  • Adaptive Server Enterprise/15.5/EBF 18164

编辑:问题是,"如何在python程序中捕获此警告消息?"

rh0*_*ium 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)
Run Code Online (Sandbox Code Playgroud)

显然(为什么超出了我的范围??)要使其在 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
Run Code Online (Sandbox Code Playgroud)

如果 status != CS_SUCCEED (我假设在你的情况下是 True)你能简单地看到“结果”等于什么吗?我想知道他们是否只是未能将结果作为例外提出?