我正在 Ubuntu 22.04.3 LTS 下编写一个 Python3 脚本,以在 Firebird3.0 服务器下使用 Firebird 数据库。我使用 firebird.driver 库。但我不断收到错误“不是目录”。即使我处理最简单的情况,它们看起来也像 firebird 驱动程序文档中的代码示例。
我尝试使用函数 connect 打开现有数据库,但出现以下异常:
File "/home/izyakantorovich/Documents/projects/altium-db/altium-db-sync/db_builder.py", line 359, in db_copy_tables
self.src_conn = fb.connect(self.src_db_file, user=self.USERNAME, password=self.PASSWORD, charset='utf-8')
File "/home/izyakantorovich/.local/lib/python3.10/site-packages/firebird/driver/core.py", line 2132, in connect
return __make_connection(False, dsn, db_config.utf8filename.value, dpb.get_buffer(),
File "/home/izyakantorovich/.local/lib/python3.10/site-packages/firebird/driver/core.py", line 2047, in __make_connection
att = provider.attach_database(dsn, dpb, 'utf-8' if utf8filename else FS_ENCODING)
File "/home/izyakantorovich/.local/lib/python3.10/site-packages/firebird/driver/interfaces.py", line 1294, in attach_database
self._check()
File "/home/izyakantorovich/.local/lib/python3.10/site-packages/firebird/driver/interfaces.py", line 113, in _check
raise self.__report(DatabaseError, self.status.get_errors())
firebird.driver.types.DatabaseError: operating system directive access failed
-Not a directory
self.src_db_file 是 '/home/izyakantorovich/Documents/projects/altium-db/DXPSERVER.DAT' .DAT格式文件是一些与Firebird软件兼容的特殊DB。说实话,我不清楚它是什么,但是相同的代码(具有另一个指定的 DXPSERVER.DAT 文件路径)在 Windows 下非常有效。
我还尝试使用 create_database 函数创建一个新数据库,但得到了相同的异常(DatabaseError、Not a Directory 等)。我运行了下面的代码:
import firebird.driver as fb
def main():
db = fb.create_database(database='/home/izyakantorovich/Documents/projects/altium-db/test.fdb',
user='SYSDBA', password='masterkey')
根据 Firebird 驱动程序文档,我在驱动程序函数调用中指定的数据库路径似乎采用正确的样式。我做错了什么?
有两个可能的问题:
如果使用仅文件路径连接字符串,则很难说是哪种,因为实际的连接方法将取决于所使用的客户端库是否也可以访问数据库引擎库
plugins/libEngine12.so
。
如果您打算通过 Firebird 服务器进行连接,则:
firebird
和/或组 firebird
),即不是在您的主目录中,并且inet://localhost/
前缀,后跟实际路径或旧 URL 前缀 localhost:
后跟路径。如果您想使用嵌入式进行连接,请确保您是
firebird
组的成员(您需要在添加自己后重新加载组)。