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