Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2020 18:57:36

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 251
Репутация: +  4  -
Профиль   Отправить e-mail  

Странная особенность у sqlite

Добрый день!
У меня есть такой код:

 self.dbc.execute ('select CELLNO,NO,POS1 from BLOCKS \
                                   where ARTICLEID = ? and BLOCK = 0 \
                                   and IGNORE = 0 and TYPE in ("term","phrase") \
                                   and SELECTABLE = 1 \
                                   and POS1 < POS2 order by CELLNO,NO'
                                 ,(self.artid,)
                                 )
Обратил внимание, что замена данного фрагмента на
 self.dbc.execute ('select CELLNO,NO,POS1 from BLOCKS \
                                   where ARTICLEID = ? and BLOCK = 0 \
                                   and IGNORE = 0 and TYPE in (?,?) \
                                   and SELECTABLE = 1 \
                                   and POS1 < POS2 order by CELLNO,NO'
                                 ,(self.artid,'term','phrase',)
                                 )
решило ошибку, иногда возникающую в программе. Почему
 TYPE in ("term","phrase")
не эквивалентно
 TYPE in (?,?)
? В чем могут быть подводные камни?

Офлайн

#2 Июль 5, 2020 22:17:36

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 190
Репутация: +  15  -
Профиль   Отправить e-mail  

Странная особенность у sqlite

Не уверен что сработает, но так выглядит логичнее:

  self.dbc.execute ('select CELLNO,NO,POS1 from BLOCKS \
                                   where ARTICLEID = ? and BLOCK = 0 \
                                   and IGNORE = 0 and TYPE in (?) \
                                   and SELECTABLE = 1 \
                                   and POS1 < POS2 order by CELLNO,NO'
                                 ,(self.artid,['term','phrase'])
                                 )

Офлайн

#3 Июль 6, 2020 01:21:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 8419
Репутация: +  756  -
Профиль   Отправить e-mail  

Странная особенность у sqlite

vanvanov
В чем могут быть подводные камни?
В виде кавычек могут быть. В разных СУБД синтаксис SQL может отличаться. Где-то могут быть добавки всякие и прочее. Где-то одинарные кавычки должны быть, где-то двойные кавычки, где-то обратные кавычки. В разных СУБД могут быть различия, хотя пишешь одно и то же и язык SQL - один и тот же типа. Сюрпризы там бывают, поэтому всё надо проверять на реальной СУБД, прежде чем в питоне писать код потом для неё.
Сами инструкции в питоне ты пишешь в тройных кавычках. А внутри инструкций ты подбираешь правильные кавычки, сначала посмотрев в самой СУБД, какие они должны быть по её синтаксическим правилам.



Отредактировано py.user.next (Июль 6, 2020 01:24:15)

Офлайн

#4 Июль 9, 2020 00:45:02

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Странная особенность у sqlite

Или использовать SQLALchemy. Она за тебя сам запомнить какие сюрпризы в каких бд. Для этого у нее есть порты.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version