Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2007 21:07:25

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

У меня как всегда накипела проблема)) Не срабатывают first и last при группировках в запросах, причем остальные варианты срабатывают (count, sum). Проверила в модулях mx.ODBC, mySQLdb, pysqlite, везде выскакивает ошибка синтаксиса, но этот же запрос срабатывает без ошибок в других программах. Вот пример запроса к MySQL:

“”“SELECT last(number) as numb
FROM fiz
WHERE datarozhd > ‘1970-01-01’
GROUP BY datarozhd;”“”

Вот ошибка:

“ProgrammingError: (1064, ”You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(number) as numb\n FROM fiz\n ’ at line 1“)”

Если заменить last на sum, ошибки нет. Может есть специфика sql в модулях питона и какая-либо замена данным функциям?



Офлайн

#2 Июль 5, 2007 22:37:53

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

Мне кажется что путанница в движках БД.
В MySQL насколько я знаю - нет функции last() - поэтому неудивительно, что он ошибку выдает.
В SQLite - такая может быть, но не уверен на 100%.



Отредактировано (Июль 5, 2007 22:41:42)

Офлайн

#3 Июль 6, 2007 08:30:45

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

Форум, где уже обсуждалась эта тема
Действительно, last и first не входят в список агрегатных функций sql.
Есть еще один момент - не работает также конструкция JOIN во всех этих модулях, хотя в книге по sql я уже нашла примеры использования join при обращении к oracle и mysql. Объединение срабатывает только по банальному знаку равенства.



Офлайн

#4 Июль 6, 2007 12:08:35

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

proDiva
Форум, где уже обсуждалась эта тема
Действительно, last и first не входят в список агрегатных функций sql.
Есть еще один момент - не работает также конструкция JOIN во всех этих модулях, хотя в книге по sql я уже нашла примеры использования join при обращении к oracle и mysql. Объединение срабатывает только по банальному знаку равенства.
Я использовал JOIN по крайней мере в MySQLdb - все было ОК.
Вообще говоря - от модули питона при работе с БД не разбирают запрос - они передают его серверу (движку - в случае SQLite). И не в их силах - не обрабатывать JOIN например.

Думаю: в том, что что-то не получается, виноват неправильный запрос.



Отредактировано (Июль 6, 2007 12:10:59)

Офлайн

#5 Июль 6, 2007 13:49:39

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

А этот запрос сам по себе нормально на сервере отрабатывается?



Офлайн

#6 Июль 6, 2007 16:13:13

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

Может ласт заменить на макс? Или упорядочить в нужном порядке и получить один штук лимитом?
Джойны можно заменить:
select A.a, B.b from A, B where A.ForeignKey=B.PrimaryKey
select A.a, B.b from A join B on A.ForeignKey=B.PrimaryKey
Это одно и то же…
Работает на большинстве субэдэ.
:)



Офлайн

#7 Июль 9, 2007 09:38:37

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Специфика SQL-языка в pysqlite

lorien
Приведите пример запроса с JOIN, который вызывает ошибку.
Вот пример запроса к Oracle, работающего в access:

“SELECT a.accnumb, d.clident
FROM od_accref a INNER JOIN od_clientcard d ON a.clident = d.clident
WHERE a.accnumb LIKE ”45505810_0011*“;”

Вот пример запроса, не работающего в sqlite и Query Reporter:

“SELECT a.accnumb, d.clident
FROM accref a
INNER JOIN clientcard d
ON a.clident = d.clident
WHERE a.accnumb LIKE ‘45505810_0011%’;”

Вот текст ошибки: “ORA-00933: SQL command not properly ended”

А в таком виде работает:

“SELECT a.accnumb, d.clident
FROM accref a, clientcard d
WHERE a.clident = d.clident and a.accnumb LIKE ‘45505810_0011%’;”



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version