【发布时间】:2023-01-13 01:03:11
【问题描述】:
我试图更熟悉占位符以从 python 运行 SQL 命令,但无法成功传递字符命令。在这里,我描述了一个将被放大的简化解决方案。在 python 中,我可以使用占位符创建基本的 SQL 查询
sql = 'SELECT * FROM schema.my_table\nLIMIT %s'
并设置运行包含在函数中的命令,该函数采用 sql 命令加上一个值(行数限制)。
def my_function(query, value):
conn=pg_engine().raw_connection()
with conn.cursor() as conn:
cursor.execute(query, value)
conn.commit()
return rowcount
例如,如果我执行my_function(sql, [10]),这可以成功运行,但是如果我尝试运行my_function(sql, ['ALL']),那么我会收到一个错误
bigint 类型的无效输入语法
所以它显然期待一个数值;在这种情况下是否有不同的传递字符串的方式,或解决此问题的另一种方式?
谢谢
【问题讨论】:
-
%s用于传递参数而不是 SQL 文字。您使用什么 Python 库进行 Postgres 连接?如果是psycopg2,则查看 sql 以获得安全的 SQL 字符串组合。 -
是的,我正在使用
psycopg2,将再看一下链接
标签: python sql postgresql type-safety