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

我怀疑你不能在一次executesql调用中执行多个语句;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 回答