不带引号的SQL.IDENTIFIER

sql.Identifier without quoting(不带引号的SQL.IDENTIFIER)
本文介绍了不带引号的SQL.IDENTIFIER的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)