【问题标题】:SqlAlchemy: proper way to do a bare exists querySqlAlchemy:进行裸存在查询的正确方法
【发布时间】:2013-02-20 12:03:36
【问题描述】:

我有以下构造,它似乎可以生成所需的 SQL:

>>> print session.query(exists('1').where(MyTable.name=='x'))
SELECT EXISTS (SELECT 1 
FROM my_table
WHERE my_table.name = :name_1) AS anon_1

但是,当我尝试使用 .scalar().all() 执行它时,它会返回错误:

*** UnboundExecutionError: Could not locate a bind configured on SQL expression or this Session

如何为这个简单的查询绑定它?我不想这样做bool(MyTable.query.filter(MyTable.name=='x').first()),因为这会浪费地从表格中拉回整行。


更新:

我也试过了:

>>> session.connection(mapper=MyTable).execute(
        exists('1').where(MyTable.name=='x'))
StatementError: Not an executable clause 'EXISTS \
  (SELECT 1 \nFROM my_table \nWHERE my_table.name = %(name_1)s)' []

【问题讨论】:

  • 你应该有一行写着session.configure(bind=engine)
  • session.configure() 抛出错误AttributeError: 'function' object has no attribute 'configure' session.__class__sqlalchemy.orm.scoping.ScopedSession
  • 这听起来不对。请在构造session和运行session.configure()的位置添加相关代码。
  • 嗯,我正在使用 TurboGears (1.5.1),正在调查..

标签: sqlalchemy exists turbogears


【解决方案1】:

我想知道了:

>>> session.connection(mapper=MyTable).execute(
      select([exists('1').where(MyTable.name=='x')]))

【讨论】:

    猜你喜欢
    • 2013-03-01
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多