【问题标题】:Raw SQL within Pylons app that uses SQLAlchemy?Pylons 应用程序中使用 SQLAlchemy 的原始 SQL?
【发布时间】:2010-09-29 03:29:22
【问题描述】:

我继承了一个使用 SQLAlchemy 的 Pylons 应用程序。我对 SQLAlchemy 一无所知,对 Pylons 知之甚少 :)

我需要在应用程序中运行一些原始 SQL。 SQLAlchemy 目前似乎以以下方式工作(示例代码):

import myapp.model as model
model.Session.query(model.KeyValue) # existing code
            .join(model.Key)
            .filter(model.Key.name == name)
            ).count() == 0, name

如何让它运行原始 SQL?我看到我需要一个 execute() 语句,但我究竟该如何运行呢?以下都失败了:

model.Session.execute('create table hello_world;')
model.Connection.execute("""
create table hello_world;
""")

什么是魔法召唤?现有代码中没有对 Connection 对象的引用,我不确定如何创建一个。

【问题讨论】:

    标签: sqlalchemy pylons


    【解决方案1】:

    你可以通过connection method获取Session使用的连接:

    connection = model.Session.connection()
    

    然后您可以发出查询:

    connection.execute('create table hello_world;')
    

    请注意,在 Pylons 中 model.Session 不是 sqlalchemy.orm.session.Session 。这是sqlalchemy.orm.scoping.ScopedSession实例。这就是它在 model.meta 模块中的创建方式:

    Session = scoped_session(sessionmaker())
    

    【讨论】:

      【解决方案2】:

      我的第一个冲动是建议尝试 Connection 实例的 execute() 方法,而不是示例代码所暗示的类本身的 execute() 方法。

      你在 the Pylons Book examples 工作吗?

      【讨论】:

      • 您认为我应该尝试根据示例创建显式连接吗?我只是想知道是否有一个聪明的方法,因为我似乎继承了试图做一些聪明事情的代码。
      • 我会尝试的第一件事是创建一个显式连接,是的。如果这不起作用,那么肯定会发生一些过于聪明的事情。祝继承代码好运。
      猜你喜欢
      • 2013-08-01
      • 2020-08-07
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      相关资源
      最近更新 更多