2010-09-20 38 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

相關問題