在Python fdb中无法从以"@"开头的表中选择。

问题描述 投票:1回答:1

我正在使用FDB模块从Firebird数据库中使用Python获取数据。@TABLE_NAME在表名中加入"@"并不是我的主意,这使得它无法执行语句。当我尝试从普通表中获取数据时,一切都很正常。

cur.execute("SELECT * FROM @TABLE_NAME")

返回这个错误。

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)

我不知道该怎么做,我想得到一些帮助。

python firebird fdb
1个回答
1
投票

Firebird SQL服务器中的 "正则标识符 "不能含有 @ 符号 识别器.

在SQL Dialect 3中,你可以有引号的不规则标识符,见 SQL方言.

但你最好检查一下你是否真的在使用它。当然,"方言1 "已经非常过时了,现在任何合理的程序在创建和连接Firebird数据库时都会设置 "方言3"。不过你还是检查一下这个会更安全。

你可以通过以下方式检查数据库属性 select MON$SQL_DIALECT from MON$DATABASEMON$DATABASE.

据我所知,没有办法查询连接的方言,但似乎对于连接到方言3的数据库来说,强制执行方言1是相当异国情调和难以做到的工作,所以你可以实际地认为它几乎不会发生。不过你还是必须知道这一点,并且能够在极少数情况下检查连接打开的代码,以防止因方言而出现问题。


在你确定你是在现代SQL方面,你可以开始引用标识符。

SELECT * FROM "@TABLE_NAME"

根据 如何在python中写出不用转义的字符串字元? 你有很多方法可以做到,比如。

  • C式 cur.execute( "SELECT * FROM \"@TABLE_NAME\"" )
  • 原始风格 cur.execute( r'SELECT * FROM "@TABLE_NAME"' )
  • 和许多其他的,带有Unicode数字代码和字符串表达式的。
© www.soinside.com 2019 - 2024. All rights reserved.