1

在 Windows10 64 位系统上安装了 Firebird 3.0.4 和 Python v3.7.7。

我可以使用以下命令恢复数据库:

gbak.exe -r -USER user -PASSWORD password database.fdk database.fdb

我想在 Python 脚本中使用 fdb(嵌入式火鸟)做同样的事情,但它不起作用!

conn = fdb.services.connect(host='localhost', user='user', password='password', fb_library_name=API)
conn.restore(database.fbk, database.fdb)
restore_report = conn.readlines()

----> 1 conn = fdb.services.connect(host='localhost', user='user', password='password', fb_library_name=API)
2 conn.restore(database.fbk, database.fdb)
3 restore_report = con.readlines()
4 restore_report

TypeError:connect() 得到了一个意外的关键字参数“fb_library_name”

conn = fdb.services.connect(host='localhost', user='user', password='password')
conn.restore(database.fbk, database.fdb)
restore_report = conn.readlines()

DatabaseError: ('Services/isc_service_attach:\n- SQLCODE: -902\n- 无法完成对主机“localhost”的网络请求。\n- 无法建立连接。', -902, 335544721)

4

1 回答 1

1

假设您想使用 Firebird Embedded(根据您之前的问题判断),以下对我有用:

import fdb

fdb.load_api('C:/Program Files/Firebird/Firebird-3.0.5.33220-0_x64/fbclient.dll')

def report_progress(line):
    print(line)

svc = fdb.services.connect(user='sysdba', password='masterkey')
svc.restore('c:/db/somedatabase.fbk', 'c:/db/somedatabase.fdb', callback=report_progress)

也就是说,显式加载fbclient.dll与嵌入式 Firebird 相关联的内容(另请参阅在 Python 脚本中不可能在本地数据库上连接 Firebird),不要在其中指定主机名,fdb.services.connect因此它将使用 Firebird Embedded 服务管理器而不是尝试连接到本地主机Firebird 服务器(在您的情况下未运行)。

除了我用来报告进度的回调之外,您还可以使用readlines()orwait()方法。

于 2020-06-20T08:48:25.670 回答