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

AP2*_*257 2 pylons sqlalchemy

我继承了一个使用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
Run Code Online (Sandbox Code Playgroud)

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

model.Session.execute('create table hello_world;')
model.Connection.execute("""
create table hello_world;
""")
Run Code Online (Sandbox Code Playgroud)

什么是魔术调用?现有代码中没有对Connection对象的引用,我不知道如何创建一个.

zif*_*fot 8

您可以使用其连接方法获取Session使用的连接:

connection = model.Session.connection()
Run Code Online (Sandbox Code Playgroud)

然后你可以发出你的查询:

connection.execute('create table hello_world;')
Run Code Online (Sandbox Code Playgroud)

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

Session = scoped_session(sessionmaker())
Run Code Online (Sandbox Code Playgroud)