Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将web2py DAL与临时表一起使用_Python_Data Access Layer_Web2py - Fatal编程技术网

Python 将web2py DAL与临时表一起使用

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

我试图通过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 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()
的观点我并不了解,但似乎是一个儿童安全细节,而不是一个可以忽略的框架。是的,但您不必自己安装所有轮子,也不必在不同的服务站对每个轮子进行维修。其中一些车轮比现有车轮跑得更快,操控性更好。:-)