使用SQLAlchemy的Pylons app中的原始SQL?

时间:2010-09-20 19:26:04

标签: sqlalchemy pylons

我继承了一个使用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对象的引用,我不知道如何创建一个。

2 个答案:

答案 0 :(得分:8)

您可以使用其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())

答案 1 :(得分:1)

我的第一个冲动是建议尝试Connection实例的execute()方法,而不是类本身的execute()方法,因为你的示例代码表明你正在做。

您是否正在使用the Pylons Book examples