sqlite3 3.5.7 против 3.6.21 проблема скобок - PullRequest
1 голос
/ 09 февраля 2012

Я пишу скрипт на python (2.7), который выполняет запрос sqlite3.Я тестирую этот запрос на компьютере с Windows, и он работает как шарм.Когда я включаю Linux, запрос не выполняется.он выдает ошибку: он не может найти такой столбец ... (т. е. tableA.ID, который, очевидно, существует и не содержит опечаток)

Запрос в основном представляет собой последовательность левого соединения, которая создает плоскую таблицу.

Это в формате:

 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 (возможно, используя круглые скобки)?очень трудно сказать, можно ли доверять результату запроса без скобок и совпадает ли он с тем, с которым он существует, поскольку он представляет собой огромный объем данных и потребует длительных тестов, прежде чем убедиться, что все в порядке.

РЕДАКТИРОВАТЬ: как LEFT JOIN работает без скобок?Будут ли сначала объединены большинство таблиц, а затем остальные?если я уверен, что запрос будет вести себя так же без скобок, я могу пойти на это.я группирую левые соединения слева направо, то есть: ((((((AB) C) D) E) F)

1 Ответ

0 голосов
/ 30 апреля 2012

Я бы рекомендовал сначала согласовать ваши sqlite3 на двух платформах, чтобы Linux и Windows работали в одной и той же версии.На момент написания статьи (30 апреля 2012 г.) текущей версией является 3.7.11.Загрузки доступны по адресу http://www.sqlite.org/download.html

. В качестве дополнительного примечания я обнаружил, что версии кода, которые вы получаете из репозитория Linux-дистрибутива, как правило, устарели, поэтому их лучше загрузить с веб-сайта программного обеспечения.

...