我在网上搜索“sql.Identifier without quoting”并且这个帖子 https://stackoverflow.com/questions/43877210/how-to-remove-the-quotes-from-a-string-for-sql-query-in-python仅相关。它建议使用.format(sql.Identifier
.
然而,此方法向标识符添加双引号,据我所知,不能用于 PostgreSQL 中不带引号的标识符。正如我读过的here https://lerner.co.il/2013/11/30/quoting-postgresql/专家建议不要在 Postgres 中引用标识符。
我没有看到选项sql.Identifier
跳过引用该文件 https://www.psycopg.org/docs/sql.html#psycopg2.sql.Identifier以及替代方法sql
的模块psycopg2
。如何以注入安全的方式从 Python 使用 PostgreSQL 来处理不带引号的标识符?
添加:我的困惑是由于我使用“public.abc”作为 sql.Identifier,正如 @klin 的答案中所述,我应该使用两个标识符。整理之后,我发现引用仅用于区分大小写(和/或使用点等“其他”符号的情况)。
如果您的数据库 API 经常引用标识符,那就是好东西。不要努力解决这个问题。
反对引用标识符的情绪并不是针对引用本身,而是针对标识符的选择require引用。即不遵循标识符语法规则或包含大写字母的标识符。此类标识符会引起各种麻烦,例如在 shell 脚本中,引用总是很麻烦。
引用不需要引用的标识符是无害的,而且它实际上是一个很好的安全措施。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)