2012-08-25 71 views
0

我試圖通過web2py DAL對臨時表執行一些原始SQL,但是我的結果都返回無。使用具有臨時表的web2py DAL

下面是完整的功能:

def test(): 

    db_test = DAL('mysql://root:[email protected]/test') 

    sql = """CREATE TEMPORARY TABLE tmp LIKE people; 
    INSERT INTO tmp SELECT * FROM people; 
    INSERT INTO tmp SELECT * FROM people; 
    SELECT * FROM tmp;""" 

    results = db_test.executesql(sql) 

顯然,SQL是一種簡化,但運行在SQL窗格中的相同的SQL返回正確的結果。我需要做些什麼才能使DAL與此一起工作?

回答

1

您不能在一個執行多個語句executesql致電我懷疑; web2py中使用DBAPI 2.0.execute()呼籲這些發送到後端數據庫,並通常僅支持單語句:

db_test = DAL('mysql://root:[email protected]/test') 

sqlddl = """CREATE TEMPORARY TABLE tmp LIKE people; 
INSERT INTO tmp SELECT * FROM people; 
INSERT INTO tmp SELECT * FROM people;""" 

for statement in sqlddl.split(';'): 
    db_test.executesql(statement.strip()) 

sqlselect = "SELECT * FROM tmp;" 
results = db_test.executesql(sqlselect) 
+0

感謝,但我只是試圖與同result-仍返回'None'。 – Yarin

+0

我必須說我對web2py非常謹慎;首先,它將執行'fetchall()'而不管結果集的大小。如果結果集足夠大,這將很容易導致內存問題。 –

+0

感謝您的更新 - 多執行可能是問題,所以我通過將其滾動到存儲過程來解決此問題。 – Yarin