繁体   English   中英

如何从sqlalchemy执行SET语句?

[英]How to execute SET statement from sqlalchemy?

我正在尝试从sqlalchemy执行SET语句。

>>> from sqlalchemy import create_engine
>>> c = create_engine('postgres://myuser@myremoteserver/mydb?keepalives_idle=4&keepalives_interval=1&keepalives_count=5')
>>> c.execute('SET statement_timeout=1000')
<sqlalchemy.engine.base.ResultProxy object at 0xb7b250>

它将返回ResultProxy对象。 但是未设置statement_timeout值。

>>> c.execute('SHOW statement_timeout').scalar()
'0'

如果我尝试ResultProxy.scalar则给出错误。

>>> c.execute('SET statement_timeout=1000').scalar()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.6/site-packages/sqlalchemy/engine/base.py", line 1676, in scalar
    self.connection._handle_dbapi_exception(e, None, None, self.cursor, self.context)
  File "/usr/lib/python2.6/site-packages/sqlalchemy/engine/base.py", line 923, in _handle_dbapi_exception
    self.invalidate(e)
  File "/usr/lib/python2.6/site-packages/sqlalchemy/engine/base.py", line 633, in invalidate
    raise exc.InvalidRequestError("This Connection is closed")
sqlalchemy.exc.InvalidRequestError: This Connection is closed

如何设置此变量的值?

两个观察。

首先,您的错误建议尝试使用封闭的连接。 是否有可能在后台发生某种奇怪的连接池问题,或者在两者之间关闭了连接?

其次,第二个查询不返回值。

仔细阅读您的第一种方法似乎可行,不同之处在于ResultProxy未设置为值,因为该语句未返回任何内容。 您可能只想丢弃它,而是运行SHOW命令来获取应用程序的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM