Postgres передать кортежи как SQLite - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь передать несколько кортежей в postgresql с помощью psycop2. Пример Я получил 2 кортежа, как показано ниже:

tup_A = (1, 2, 3, 4)
tup_B = (5, 6, 7, 8)

Команда SQL, например:

tup_A_placeholder = ",".join("?"*len(tup_A))
tup_B_placeholder = ",".join("?"*len(tup_B))
sql = 'SELECT * FROM abc WHERE colA IN (%s) AND colA NOT IN (%s) ORDER BY group_id;' % (tup_A_placeholder, tup_B_placeholder)
groups = executor(sql, tup_A+tup_B)

Это работает на SQLite, но не на Postgres. Я знаю, что в Postgres мы можем передать кортеж на один% s, но я хотел бы изменить команду, чтобы она могла работать как на SQLite, так и на Postgres

Любая помощь будет принята с благодарностью,

1 Ответ

0 голосов
/ 20 апреля 2020

Согласно документации Psycopg 2.8.5 вы должны использовать %s вместо ? в качестве заполнителя шаблона:

Таким образом, ваш код должен выглядеть примерно так:

tup_A = (1, 2, 3, 4)
tup_B = (5, 6, 7, 8)

tup_A_placeholder = ','.join(['%s' for i in tup_A])
tup_B_placeholder = ','.join(['%s' for i in tup_B])

sql = 'SELECT * FROM abc WHERE colA IN (%s) AND colA NOT IN (%s) ORDER BY group_id;' % (tup_A_placeholder, tup_B_placeholder)
groups = executor(sql, tup_A+tup_B)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...