如何使用SQLAlchemy连接到嵌入式Firebird数据库

3
我正在尝试使用Flask-SQLAlchemy连接Firebird(嵌入式版本),但是我一直遇到以下错误:
sqlalchemy.exc.DatabaseError: (fdb.fbcore.DatabaseError) ('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "127.0.0.1".\n- Failed to establish a connection.', -902, 335544721)

我的连接变量是:

SQLALCHEMY_DATABASE_URI ='firebird://sysdba:masterkey@127.0.0.1:3050/' + os.path.join(basedir, 'data.gdb')

我也尝试使用本地主机,但是出现了相同的错误。
你有任何线索吗?我做错了什么吗?
这是在Windows 7上使用firebird 2.5,Flask-SQLAlchemy 2.0和SQLAlchemy == 1.0.3。
我还尝试了不提供用户名密码,因为它是嵌入式版本,但仍然无法工作。
SQLALCHEMY_DATABASE_URI ='firebird://127.0.0.1:3050/' + os.path.join(basedir, 'data.gdb')

1
您正在尝试连接到 127.0.0.1(本地主机),因此您不是在尝试连接到 Firebird 嵌入式实例,而是尝试连接到一个实际的服务器(该服务器未运行,因此出现错误)。您可以尝试省略主机名和端口号,但我并不确定是否支持使用 Firebird 嵌入式。 - Mark Rotteveel
啊,那可能就解释了。确实不使用 localhost 和端口是无法工作的。它实际上会提取我的计算机名称并尝试连接到它。这真是太糟糕了,我需要使用嵌入式数据库,但 SQLite 在 ALTER 支持方面存在问题。好吧,回去继续研究吧。 - Kinwolf
Firebird嵌入式可能会起作用,但是您可能需要将fbembed.dll重命名为fbclient.dll(并将其放置在Python路径上),以使其正常工作。 - Mark Rotteveel
那已经完成了。如果不重命名dll,它实际上会查找注册表并给出另一个错误。这迫使我阅读实际的文档:P - Kinwolf
Firebird嵌入式DLL实际上是Firebird客户端+数据库引擎;如果FDB始终指定主机名,那么它将表现得像一个普通的fbclient.dll。我已经查找了FDB是否支持Firebird嵌入式,但没有找到确凿的信息。 - Mark Rotteveel
我在SQLAlchemy邮件列表上提出了我的问题,想知道是否有解决方案可以连接到嵌入式版本的Firebird。 - Kinwolf
1个回答

0

在我将 SQLALCHEMY_DATABASE_URI 的值更改为 firebird+fdb://login_on_firebird:password_on_firebird@localhost:3050/ + os.path.join(basedir, 'data.gdb')之前,我也遇到了同样的错误。此外,您需要在 firebird 服务器上创建特殊用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接