0

web2py DAL を介して一時テーブルに対して生の SQL を実行しようとしていますが、結果はすべて None を返します。

完全な機能は次のとおりです。

def test():

    db_test = DAL('mysql://root:root@localhost/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 を動作させるにはどうすればよいですか?

4

1 に答える 1

1

executesql1 回の呼び出し複数のステートメントを実行することはできません。web2py はDBAPI 2.0 .execute()呼び出しを使用してこれらをバックエンド データベースに送信し、通常は単一のステートメントのみをサポートします。

db_test = DAL('mysql://root:root@localhost/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)
于 2012-08-25T16:24:28.480 に答える