不带引号的SQL.IDENTIFIER

本教程将介绍不带引号的SQL.IDENTIFIER的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

不带引号的SQL.IDENTIFIER 教程 第1张

问题描述

我在Web上搜索了"不带引号的SQL.IDENTIFIER",而this post只是相关的。建议使用.format(sql.Identifier

然而,该方法将双引号添加到标识符中,并且据我所知,它不能用于在PostgreSQL中使用不带引号的标识符。正如我在here中读到的那样,专家建议不要在postgres中引用标识符。

我在sql.Identifier中没有看到跳过the document中的引用以及psycopg2sql模块中的替代方法的选项。怎么在未加引号的标识符中以注入安全的方式使用Python中的PostgreSQL?

补充道:我的困惑是因为我使用了"Public.abc"来表示SQL.IDENTIFIER,而在@Klin的回答中,我应该使用两个标识符。整理好后,我发现引号仅用于区分大小写(和/或使用点等其他符号)。

推荐答案

您应该区分两种不同的情况。如果要在区分大小写的标识符中使用大写字母,必须使用双引号。如果您只使用小写字母作为标识符,可以,但不必使用双引号。专家通常建议避免第一种情况。在第二种情况下,opecpg2自动添加的引号不是问题。

请注意,public.abc不是,它是包含两个标识符的表达式。因此,您应该这样使用它:

sql.SQL("select * from {}.{}").format(sql.Identifier(schema_name), sql.Identifier(table_name))

或此:

sql.SQL("select * from {}").format(sql.Identifier(schema_name, table_name))

AS(Perthe documentation):

可以将多个字符串传递给对象以表示限定的
名称,即以点分隔的标识符序列。

好了关于不带引号的SQL.IDENTIFIER的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。