为了通过psycopg2创建一个用户,我使用了以下代码:
cur=conn.cursor()
cur.execute("create user %s with password %s",('abcdefgh','0h/9warrAttrgd8EF0gkvQ==',))
这会产生以下错误:
syntax error at or near "'abcdefgh'" LINE 1: create user 'abcdefgh' with password '0h/9warrAttrgd8EF0gkvQ.
看起来% s在用户名周围加了引号,这是postgres在创建用户时不喜欢的。下面的代码可以正常工作:
cur.execute("create user abcdefgh with password %s",('0h/9warrAttrgd8EF0gkvQ==',))
对此有什么解决办法吗?
2条答案
按热度按时间cgfeq70w1#
现有的答案实际上都没有使用一种安全的方法来做这件事。然而,从Psycopg的2. 7版本开始,有了一种好得多的方法。
文档中关于使用
%s
作为标识符(表名、用户名等)的说明:只能通过此方法绑定查询值:它不应该被用来将表名或字段名合并到查询中(Psycopg会尝试将表名作为字符串值引用,从而生成无效的SQL)。如果您需要动态生成SQL查询(例如动态选择表名),您可以使用psycopg2.sql模块提供的工具
使用该模块,上述查询被更好地表述为:
Using https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries
e4yzc0pl2#
使用
psycopg2.extensions.AsIs(object):