Найти - Пользователи
Полная версия: Странная особенность у sqlite
Начало » Базы данных » Странная особенность у sqlite
1
vanvanov
Добрый день!
У меня есть такой код:
 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 (?,?)
? В чем могут быть подводные камни?
VadimK
Не уверен что сработает, но так выглядит логичнее:

  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'])
                                 )
py.user.next
vanvanov
В чем могут быть подводные камни?
В виде кавычек могут быть. В разных СУБД синтаксис SQL может отличаться. Где-то могут быть добавки всякие и прочее. Где-то одинарные кавычки должны быть, где-то двойные кавычки, где-то обратные кавычки. В разных СУБД могут быть различия, хотя пишешь одно и то же и язык SQL - один и тот же типа. Сюрпризы там бывают, поэтому всё надо проверять на реальной СУБД, прежде чем в питоне писать код потом для неё.
Сами инструкции в питоне ты пишешь в тройных кавычках. А внутри инструкций ты подбираешь правильные кавычки, сначала посмотрев в самой СУБД, какие они должны быть по её синтаксическим правилам.
4kpt_V
Или использовать SQLALchemy. Она за тебя сам запомнить какие сюрпризы в каких бд. Для этого у нее есть порты.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB