无法从 table 以 Python fdb 中的“@”开始 select
Unable to select from table starting with "@" in Python fdb
我正在使用 FDB 模块通过 Python 从 Firebird 数据库中获取数据。
我正在尝试从名为 @TABLE_NAME
的 table 获取数据,在 table 名称中包含“@”不是我的主意,这使得无法在其上执行语句。当我尝试从正常 table 获取数据时,一切正常。
这个命令:
cur.execute("SELECT * FROM @TABLE_NAME")
return 这个错误:
fdb.fbcore.DatabaseError: ('Error while preparing SQL statement:\n- SQLCODE: -104\n- Dynamic SQL Error\n- SQL error code = -104\n- Token unknown - line 1, column 15\n- @', -104, 335544569)
我不知道该怎么做,希望得到一些帮助。
"Regular identifiers" 在 Firebird SQL 服务器中不能包含 @
符号,参见 Identifiers。
使用 SQL 方言 3 你可以引用不规则的标识符,参见 SQL Dialects。
但是你最好检查一下你是否真的在使用它。诚然,方言 1 已经过时了,今天任何合理的程序在创建和连接到 Firebird 数据库时都会设置方言 3。不过你检查一下会更安全。
您可以通过 select MON$SQL_DIALECT from MON$DATABASE
检查数据库 属性,请参阅 MON$DATABASE。
我不知道如何查询连接方言,但似乎强制使用方言 1 连接到方言 3 数据库是相当奇特且难以做到的,因此您实际上可以假设它几乎永远不会发生.您仍然必须了解这一点,并且能够在极少数情况下检查连接打开代码,具体情况取决于方言。
在你确定你在 SQL 的现代方面后,你可以开始引用标识符:
SELECT * FROM "@TABLE_NAME"
根据 How to write string literals in python without having to escape them? 判断,您有多种方法可以做到这一点,例如:
- C 风格
cur.execute( "SELECT * FROM \"@TABLE_NAME\"" )
- 原始风格
cur.execute( r'SELECT * FROM "@TABLE_NAME"' )
- 和许多其他,使用 Unicode 数字代码和字符串表达式
我正在使用 FDB 模块通过 Python 从 Firebird 数据库中获取数据。
我正在尝试从名为 @TABLE_NAME
的 table 获取数据,在 table 名称中包含“@”不是我的主意,这使得无法在其上执行语句。当我尝试从正常 table 获取数据时,一切正常。
这个命令:
cur.execute("SELECT * FROM @TABLE_NAME")
return 这个错误:
fdb.fbcore.DatabaseError: ('Error while preparing SQL statement:\n- SQLCODE: -104\n- Dynamic SQL Error\n- SQL error code = -104\n- Token unknown - line 1, column 15\n- @', -104, 335544569)
我不知道该怎么做,希望得到一些帮助。
"Regular identifiers" 在 Firebird SQL 服务器中不能包含 @
符号,参见 Identifiers。
使用 SQL 方言 3 你可以引用不规则的标识符,参见 SQL Dialects。
但是你最好检查一下你是否真的在使用它。诚然,方言 1 已经过时了,今天任何合理的程序在创建和连接到 Firebird 数据库时都会设置方言 3。不过你检查一下会更安全。
您可以通过 select MON$SQL_DIALECT from MON$DATABASE
检查数据库 属性,请参阅 MON$DATABASE。
我不知道如何查询连接方言,但似乎强制使用方言 1 连接到方言 3 数据库是相当奇特且难以做到的,因此您实际上可以假设它几乎永远不会发生.您仍然必须了解这一点,并且能够在极少数情况下检查连接打开代码,具体情况取决于方言。
在你确定你在 SQL 的现代方面后,你可以开始引用标识符:
SELECT * FROM "@TABLE_NAME"
根据 How to write string literals in python without having to escape them? 判断,您有多种方法可以做到这一点,例如:
- C 风格
cur.execute( "SELECT * FROM \"@TABLE_NAME\"" )
- 原始风格
cur.execute( r'SELECT * FROM "@TABLE_NAME"' )
- 和许多其他,使用 Unicode 数字代码和字符串表达式