从Firebird数据库表获取列名列表时出错

时间:2015-11-07 14:19:27

标签: python database firebird firebird2.5

我尝试了几次使用python获取firebird中的表列表我试过这个Get list of column names from a Firebird database table

select rdb$field_name from rdb$relation_fields where rdb$relation_name=factura;

但无法正常显示错误('Error while preparing SQL statement:\n- SQLCODE: -206\n- Dynamic SQL Error\n- SQL error code = -206\n- Column unknown\n- FACTURA\n- At line 1, column 72', -206, 335544569)

还尝试使用show table factura;,但我重新调整了错误('Error while preparing SQL statement:\n- SQLCODE: -104\n- Dynamic SQL Error\n- SQL error code = -104\n- Token unknown - line 1, column 1\n- show', -104, 335544569)

所以,我不知道如何获得这个表格列表。

3 个答案:

答案 0 :(得分:0)

仅当factura是表的名称

时才有效

答案 1 :(得分:0)

注意:我已将查询包含在您的答案中,因为它更容易回答。

您的列未知 - FACTURA 错误,因为您的where子句是:

where rdb$relation_name=factura

您对factura的不加引用使其成为rdb$relation_fields的列名,但不存在此类列。这会导致错误。

相反,您希望选择rdb$relation_name列具有(字符串)值factura的行,这意味着您需要将其括在单引号中(如the accepted answer of the question you refer to中所示) :

where rdb$relation_name='factura'

show table factura不起作用的原因是因为它不是Firebird的SQL语法的一部分,它只存在于Firebird ISQL工具中。

答案 2 :(得分:0)

表名也必须是大写的,否则不会找到任何名称。尝试:

select rdb$field_name
from   rdb$relation_fields
where  rdb$relation_name='FACTURA'
order by rdb$field_position;

的订单是可选的。 单引号大写表名称不是。