Python 脚本中不可能在本地数据库上连接 Firebird
Firebird connection on a local database impossible within a Python script
我可以通过以下命令使用 Firebird ISQL 工具 (Firebird 3.0.4) 连接到我的 Firebird 数据库:
connect "C:\Documents\database.db" user 'USER' password 'PASSWORD';
当我想在 Python 脚本(Python v3.7.7 on a Windows10 64 位)中执行此操作时,在包括 fdb v2.0.1 甚至虚拟环境中firebirdsql v1.1.3,我不行而且系统报错
import fdb
con = fdb.connect(database="C:\Documents\database.db", user='USER' password='PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE:
-902\n- Unable to complete network request to host "xnet://Global\FIREBIRD".', -902, 335544721)
或
con = fdb.connect(host='localhost', database="D:\Documents\database.db", user= 'USER' password= 'PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE:
-902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)
或
con = fdb.connect(dsn="localhost:C:\Documents\database.db", user='USER' password='PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE:
-902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)
或
import firebirdsql
con = firebirdsql.connect(host='localhost', database="D:\Documents\database.db", user='USER' password='PASSWORD'')
如果你有任何想法,欢迎你,因为我被困住了。
该错误表明FDB加载的fbclient.dll
不提供Firebird Embedded,并且您的机器上没有Firebird Server运行。
要解决此问题,您必须:
- 启动 Firebird 服务器(通过启动其服务或 运行
firebird -a
)
- 如果您想使用 Firebird Embedded 而不是 Firebird Server,请将 FDB 指向提供 Firebird Embedded
的 fbclient.dll
第 2 点可以通过多种方式完成。在我的回答中,我假设使用 C:\Program Files\Firebird\Firebird-3.0.5.33220-0_x64
中安装的 Firebird 3。从 Firebird 3 开始,普通的 Firebird Server 安装也提供了 Firebird Embedded。要指向 Firebird Embedded,您可以执行以下操作:
- 将 Firebird 安装目录添加到
PATH
环境变量(确保它在 之前 %SystemRoot\System32
/C:\Windows\System32
列出。在正常的 Firebird 安装中,没有 Firebird Embedded 的 fbclient.dll
安装在 System32
文件夹中,如果加载了它,您将无法使用 Firebird Embedded。
- 使用
fdb.load_api
加载客户端库:
fdb.load_api('C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')
这需要在第一次使用fdb.connect
之前完成,否则将使用通过正常搜索路径找到的库
- 使用
fb_library_name
连接指定客户端库 属性:
con = fdb.connect(dsn='C:/path/to/yourdatabase.fdb', user='sysdba', password='masterkey',
fb_library_name='C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')
此 属性 需要在使用 FDB 建立的第一个连接上指定。尽管 属性 的存在表明这是 'per connection',但 FDB 将始终使用第一个加载的客户端库(本质上,它的工作方式就好像您在 [=25] 之前调用了 load_api
=]).
如果您使用的是 Firebird 2.5 或更早版本,则需要下载特定的 Firebird 2.5 Embedded 软件包,并指向其 fbembed.dll
而不是 fbclient.dll
。对于 Firebird 2.5 Embedded,将其位置添加到路径将不起作用,除非您将其 fbembed.dll
重命名或复制为 fbclient.dll
.
我可以通过以下命令使用 Firebird ISQL 工具 (Firebird 3.0.4) 连接到我的 Firebird 数据库:
connect "C:\Documents\database.db" user 'USER' password 'PASSWORD';
当我想在 Python 脚本(Python v3.7.7 on a Windows10 64 位)中执行此操作时,在包括 fdb v2.0.1 甚至虚拟环境中firebirdsql v1.1.3,我不行而且系统报错
import fdb
con = fdb.connect(database="C:\Documents\database.db", user='USER' password='PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "xnet://Global\FIREBIRD".', -902, 335544721)
或
con = fdb.connect(host='localhost', database="D:\Documents\database.db", user= 'USER' password= 'PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)
或
con = fdb.connect(dsn="localhost:C:\Documents\database.db", user='USER' password='PASSWORD'')
DatabaseError: ('Error while connecting to database:\n- SQLCODE: -902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)
或
import firebirdsql
con = firebirdsql.connect(host='localhost', database="D:\Documents\database.db", user='USER' password='PASSWORD'')
如果你有任何想法,欢迎你,因为我被困住了。
该错误表明FDB加载的fbclient.dll
不提供Firebird Embedded,并且您的机器上没有Firebird Server运行。
要解决此问题,您必须:
- 启动 Firebird 服务器(通过启动其服务或 运行
firebird -a
) - 如果您想使用 Firebird Embedded 而不是 Firebird Server,请将 FDB 指向提供 Firebird Embedded 的
fbclient.dll
第 2 点可以通过多种方式完成。在我的回答中,我假设使用 C:\Program Files\Firebird\Firebird-3.0.5.33220-0_x64
中安装的 Firebird 3。从 Firebird 3 开始,普通的 Firebird Server 安装也提供了 Firebird Embedded。要指向 Firebird Embedded,您可以执行以下操作:
- 将 Firebird 安装目录添加到
PATH
环境变量(确保它在 之前%SystemRoot\System32
/C:\Windows\System32
列出。在正常的 Firebird 安装中,没有 Firebird Embedded 的fbclient.dll
安装在System32
文件夹中,如果加载了它,您将无法使用 Firebird Embedded。 - 使用
fdb.load_api
加载客户端库:
这需要在第一次使用fdb.load_api('C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')
fdb.connect
之前完成,否则将使用通过正常搜索路径找到的库 - 使用
fb_library_name
连接指定客户端库 属性:
此 属性 需要在使用 FDB 建立的第一个连接上指定。尽管 属性 的存在表明这是 'per connection',但 FDB 将始终使用第一个加载的客户端库(本质上,它的工作方式就好像您在 [=25] 之前调用了con = fdb.connect(dsn='C:/path/to/yourdatabase.fdb', user='sysdba', password='masterkey', fb_library_name='C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')
load_api
=]).
如果您使用的是 Firebird 2.5 或更早版本,则需要下载特定的 Firebird 2.5 Embedded 软件包,并指向其 fbembed.dll
而不是 fbclient.dll
。对于 Firebird 2.5 Embedded,将其位置添加到路径将不起作用,除非您将其 fbembed.dll
重命名或复制为 fbclient.dll
.