2012-02-08 42 views
1

我正在写一个python(2.7)脚本执行sqlite3查询。我正在Windows计算机上测试这个查询,它的功能就像一个魅力。当我打开Linux时,查询失败。它给出了一个错误:它找不到这样的列......(即tableA.ID明显存在并且没有错别字)sqlite3 3.5.7与3.6.21括号问题

查询基本上是一个左连接序列,它创建一个平坦表。

它的格式是:

select tableA.fieldA,tableA.fieldB, tableB.fieldC etc... 
from ((tableA LEFT JOIN tableB on tableA.ID = tableB.FID) LEFT JOIN tableC on tableA.ID = tableC.FID) etc... 

这种查询可以在Windows,但无法在Linux上的错误,除非我删除Linux上的支架是这样的:

select tableA.fieldA,tableA.fieldB, tableB.fieldC etc... 
from tableA LEFT JOIN tableB on tableA.ID = tableB.FID LEFT JOIN tableC on tableA.ID = tableC.FID etc... 

在这它不会给出错误并执行查询。 现在操作系统旁边的两个系统之间的唯一不同的是:

(from python) 
>>>import sqlite3 
>>>sqlite3.sqlite_version 
'3.5.7' (this is on linux) 
>>>sqlite3.sqlite_version 
'3.6.21' (this is on windows) 

是什么这两个版本,我怎么可以在Linux上的代码工作(使用括号可能)有什么不同? 很难判断没有括号的查询结果是否可以信任,以及它是否与使用括号的结果相同,因为它是大量的数据,并且在确保一切正常之前需要长时间测试。

编辑:如何没有括号的左加入工作?将首先加入最左边的桌子,然后休息一下?如果我确信查询的行为方式与没有制动器的行为相同,我可以去做。我将左连接从最左边到最右边分组,即:(((((AB)C)D)E)F)

+0

您可以尝试查看SQLite [发布历史摘要](http://www.sqlite.org/changes.html)。 – jjlin 2012-02-08 21:31:01

+0

乍一看左连接将允许我没有括号有相同的行为,所以我会坚持这一点暂时。如果我没有得到重大错误不会困扰我,因为显然没有人有更好的主意。 – Danny 2012-02-09 17:08:49

回答

0

我会建议先在两个平台上协调您的sqlite3,以便Linux和Windows运行相同的版本。截至撰写本文时(2012年4月30日),当前版本为3.7.11。下载地址:http://www.sqlite.org/download.html

作为一个附注,我发现从Linux发行版的代码库中获得的代码版本通常倾向于过时,所以最好从软件的网站直接下载。

+0

更新可能无法解决操作问题,因为他可能需要支持旧版本的sqlite3,因此他可能希望使这两个工作。否则,他必须添加对sqlite3版本的依赖。 – Bakuriu 2012-10-29 08:37:19