hga*_*ger 2 python firebird fdb
我可以使用 Firebird ISQL 工具 (Firebird 3.0.4) 通过以下命令连接到我的 Firebird 数据库:
connect "C:\Documents\database.db" user 'USER' password 'PASSWORD';
当我想在Python脚本(Windows10 64位上的Python v3.7.7)中,在包括fdb v2.0.1甚至firebirdsql v1.1.3的虚拟环境中执行此操作时,我不能并且系统地得到一个错误。
import fdb
con = fdb.connect(database="C:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“xnet://Global\FIREBIRD”的网络请求。', -902, 335544721)
或者
con = fdb.connect(host='localhost', database="D:\Documents\database.db", user= 'USER' password= 'PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“localhost”的网络请求。\n- 无法建立连接。', -902, 335544721)
或者
con = fdb.connect(dsn="localhost:C:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
DatabaseError: ('连接到数据库时出错:\n- SQLCODE: -902\n- 无法完成对主机“localhost”的网络请求。\n- 无法建立连接。', -902, 335544721)
或者
import firebirdsql
con = firebirdsql.connect(host='localhost', database="D:\Documents\database.db", user='USER' password='PASSWORD'')
Run Code Online (Sandbox Code Playgroud)
如果您有任何想法,欢迎您,因为我被困住了。
该错误表明fbclient.dllFDB 加载的文件不提供 Firebird Embedded,并且您的计算机上没有运行 Firebird Server。
要解决这个问题,您必须:
firebird -a)fbclient.dll提供 Firebird Embedded 的第 2 点可以通过多种方式完成。在我的回答中,我假设使用安装在C:\Program Files\Firebird\Firebird-3.0.5.33220-0_x64. 从 Firebird 3 开始,正常的 Firebird 服务器安装也提供 Firebird Embedded。要指向 Firebird Embedded,您可以执行以下操作:
PATH环境变量中(确保它列在/之前 )。在正常的 Firebird 安装中,不带 Firebird Embedded 的文件安装在该文件夹中,如果加载了该文件,则无法使用 Firebird Embedded。%SystemRoot\System32C:\Windows\System32fbclient.dllSystem32fdb.load_api加载客户端库:
fdb.load_api('C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')
Run Code Online (Sandbox Code Playgroud)
这需要在第一次使用之前完成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')
Run Code Online (Sandbox Code Playgroud)
需要在使用 FDB 建立的第一个连接上指定此属性。尽管该属性的存在表明这是“每个连接”,但 FDB 将始终使用加载的第一个客户端库(本质上,它的工作方式就像您在load_api之前调用一样connect)。如果您使用的是 Firebird 2.5 或更早版本,则需要下载特定的 Firebird 2.5 嵌入式软件包,并指向它fbembed.dll而不是fbclient.dll. 对于 Firebird 2.5 Embedded,将其位置添加到路径中将不起作用,除非您将其重命名或复制fbembed.dll到fbclient.dll.