Python 将web2py DAL与临时表一起使用
我试图通过web2py DAL对临时表执行一些原始SQL,但结果都没有返回任何结果 以下是完整的功能:Python 将web2py DAL与临时表一起使用,python,data-access-layer,web2py,Python,Data Access Layer,Web2py,我试图通过web2py DAL对临时表执行一些原始SQL,但结果都没有返回任何结果 以下是完整的功能: 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 p
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处理这个问题?我怀疑不能在一个
executesql
调用中执行多个语句;web2py使用.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)
谢谢,但我只是尝试了一下,结果还是一样——仍然返回
None
;首先,不管结果集大小如何,它都将执行fetchall()
。如果您的结果集足够大,这很容易导致内存问题。感谢您的更新-多个执行可能是问题所在,所以我将其滚动到一个存储过程中解决了这个问题。顺便说一句-对于web2py,不知道为什么-它是一个具有健壮DAL的伟大框架。您关于fetchall()
的观点我并不了解,但似乎是一个儿童安全细节,而不是一个可以忽略的框架。是的,但您不必自己安装所有轮子,也不必在不同的服务站对每个轮子进行维修。其中一些车轮比现有车轮跑得更快,操控性更好。:-)