将Python字典传递给psycopg2游标

5
我需要从Python调用一个需要17个输入参数的PostgreSQL 8.4函数。这些值存储在一个字典中,因此我可以写下以下代码:
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个回答

10
以下语法应该可以解决:
cur.execute("SELECT add_user(%(nr)s, %(email)s, ...) ...", user)

感谢Thiefmaster提供对我原本所写内容的更正: %(keyname)s 格式是在 Python数据库API 2.0 中定义的参数格式之一,详见 paramstyle 的文档。不幸的是,其他DB API 2.0数据库适配器可能不支持这种语法。

关于类似问题的答案,但带有奖励的xkcd参考,请参阅:使用psycopg2 / Python DB-API和PostgreSQL进行参数化查询


关于数据库适配器段落:在DBAPI文档中搜索“paramstyle”。它不是真正的可移植 :/ - ThiefMaster
@ThiefMaster:哎呀,谢谢你的纠正,我已经把它融入到我的答案中了。 - Mark Longair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接