2010-09-20 62 views
2

我已经继承了使用SQLAlchemy的Pylons应用程序。我对SQLAlchemy一无所知,对于主塔几乎一无所知:)使用SQLAlchemy的Pylons应用程序中的原始SQL?

我需要从应用程序中运行一些原始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对象,我不知道如何创建一个。

回答

8

您可以获取所使用的会话通过连接其connection method

connection = model.Session.connection() 

然后你就可以发出查询:

connection.execute('create table hello_world;') 

注意,在主塔model.Session不是sqlalchemy.orm.session.Sessionclass。这是的实例。这就是它如何在model.meta模块创建:

Session = scoped_session(sessionmaker()) 
1

我的第一个冲动是建议尝试Connection的一个实例的execute()方法,而不是类的execute()方法,因为你的示例代码表明你正在做。您是否正在关闭the Pylons Book examples

+0

没有 - 不幸的是,我工作过遗传代码... – AP257 2010-09-20 21:11:01

+0

你觉得我应该尝试建立一个明确的连接,按该例子吗?我只是想知道是否有一种聪明的方式,因为我似乎继承了试图巧妙做事的代码。 – AP257 2010-09-20 21:14:42

+0

我会尝试的第一件事就是创建一个明确的连接,是的。如果这不起作用,那么过于聪明的东西肯定会继续。祝你好运与继承的代码。 – 2010-09-20 21:55:03

相关问题