Передача словаря Python курсору psycopg2 - PullRequest
5 голосов
/ 28 февраля 2011

Мне нужно вызвать функцию PostgreSQL 8.4, которая требует 17 входных параметров из Python. Значения хранятся в словаре. Так что я могу написать:

cur.execute("SELECT add_user(%s, %s, %s, %s, %s, %s, %s, .......)", user["nr"], user['email']...)

Можно ли автоматически сопоставить значения в словаре с аргументами функции (которые имеют то же имя, что и ключи в словаре)?

Что-то вроде:

cur.execute("SELECT add_user(*magic-here*)", user)

1 Ответ

9 голосов
/ 28 февраля 2011

Следующий синтаксис должен сделать это:

cur.execute("SELECT add_user(%(nr)s, %(email)s, ...) ...", user)

Спасибо Thiefmaster за предоставление исправления к тому, что было у меня здесь изначально: Формат %(keyname)s для параметров является лишь одним из тех, которые определены в Python Database API 2.0 - см. Документацию по paramstyle. К сожалению, другие адаптеры базы данных API БД 2.0 могут не поддерживать этот синтаксис.

Ответ на несколько похожий вопрос, но с бонусной ссылкой на xkcd, см .: Параметризованные запросы с помощью psycopg2 / Python DB-API и PostgreSQL

...