2011-02-28 75 views
4

我需要调用PostgreSQL 8.4函数,它需要Python中的17个输入参数。这些值存储在字典中。所以,我可以写:将python字典传递给psycopg2游标

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

是否有可能的值在字典给函数的参数(其具有相同的名称作为字典中的键)自动映射?

喜欢的东西:

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

回答

9

以下语法应该这样做:

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

感谢Thiefmaster用于提供修正我在这里度过了最初:%(keyname)s格式参数是只是Python Database API 2.0中定义的那些 - 请参阅paramstyle的文档。不幸的是,其他DB API 2.0数据库适配器可能不支持此语法。

的答案,有些类似的问题,但与奖金XKCD参考,请参阅:Parameterized queries with psycopg2/Python DB-API and PostgreSQL

+0

关于数据库适配器段:在DBAPI文档搜索'paramstyle'。这不是真正的便携式:/ – ThiefMaster 2011-02-28 09:08:38

+0

@ThiefMaster:哎 - 感谢您的更正,我已经将其纳入我的答案 – 2011-02-28 09:23:15