Функция SqlObject и SqlBuilder IN() со строковыми значениями

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

Я использую Python 2.7 и последнюю версию sqlobject lib.

Я сталкивался с тем, что при вызове функции IN() со списком или кортежем строк вы получите результат, который выглядит как ошибка:

from sqlobject.sqlbuilder import table, IN

t = table.MyTable
print(IN(t.s_ID, ("1", "2")))
>>> <SQLOp 34ec648L>

Хотя с целыми числами, кажется, работает лучше:

print(IN(t.s_ID, (1, 2)))
>>>> ((MyTable.s_ID) IN (1, 2))

У кого-нибудь есть идея, почему это не работает? Я думаю больше о проблеме в библиотеке, но, возможно, я что-то упустил

Заранее спасибо!

примечание: я не считаю это важным в этом случае (так как я хочу только построить запрос), но я хочу отправить этот запрос в SQL Server 2012

D. FE.

1 ответ

Решение

Похоже, оба ваших утверждения верны. Но представление 1-го (которое включает в себя строки) зависит от базы данных - это зависит от того, как строки представлены в запросах для каждой конкретной базы данных (как они цитируются, экранируются и т. Д.). Таким образом, он не может быть преобразован в строку без надлежащего db-осведомленного объекта, такого как соединение или модель - объект, который имеет sqlrepr метод. В следующем примере __connection__ Объект является postgresql-соединением:

>>> print(__connection__.sqlrepr(IN(t.s_ID, ("1", "2")))
((MyTable.s_ID) IN ('1', '2'))
Другие вопросы по тегам