0

我有一个 Django 视图,它执行一些复杂的 SQL 查询,其中包含如下代码:

sql1 = "CREATE TEMPORARY TABLE my_temp_table ..."
cursor = connection.cursor()
cursor.execute(sql1)
...
sql2 = "INSERT INTO my_temp_table ..."
cursor = connection.cursor()
cursor.execute(sql2)

查询比这更复杂,但想法应该很清楚:我创建一个临时表,然后在其中插入一堆东西,我稍后会在视图中使用它们。这行得通——很明显,根据视图的性能,正在创建表并且正在将内容插入其中。

但是,在添加功能的过程中,我想检查插入到my_temp_table中的内容的结果,以便改进一些使用它的查询。因此,出于探索的目的,我将 SQL 更改为只创建一个常规表,以便之后进行检查。所以sql1 实际上变成了:

sql1 = "CREATE TABLE my_temp_table ..."
cursor = connection.cursor()
cursor.execute(sql1)

换句话说,除了my_temp_table是在没有“TEMPORARY”修饰符的情况下创建的之外,一切都是一样的。

问题是,当查询完成时,my_temp_table表是空的——在视图完成后,插入其中的数据(在sql2查询中)实际上都不在其中。这令人费解——显然数据在视图执行过程中成功插入到my_test_table中,否则视图将无法执行它显然正在执行的操作。但是数据去哪儿了?

[另一个确认数据实际上某个时间点在表中的事实是,我可以记录查询,然后手动手动运行相同的查询,一切都像我预期的那样工作。]

我正在使用 Django 1.4.2 使用 Django 的测试服务器(通过 manage.py runserver)运行它。

4

0 回答 0