【发布时间】:2020-08-29 20:05:37
【问题描述】:
由于 Maurice Meyer 让我意识到的语法错误而编辑了问题
我需要保护应用免受 SQL 注入,因此请使用 Psycopg2 中的 sql 模块。这会生成一个有效的查询:
conn = get_db()
cur = conn.cursor()
with open(fp, 'r') as f:
query = sql.SQL("COPY parts ({fields}) FROM STDIN WITH (FORMAT CSV, DELIMITER ';', ENCODING UTF8)").format(
fields = sql.SQL(',').join(sql.Identifier(col) for col in cols))
cur.copy_expert(query, f)
但是我想知道这是否是正确的解决方案。由于生成的查询是:
print(query.as_string(conn))
>>> COPY parts ("asin","name","t_id","supp_pid","acq_price","deposit","ean","m_pid") FROM STDIN WITH (FORMAT CSV, DELIMITER ';', ENCODING UTF8)
但根据Postgresql docs,标识符应该不加引号。 为什么它仍然有效?
【问题讨论】:
标签: python sql-injection psycopg2 composable