如何使用 FDB 在 Python 脚本中恢复 Firebird 数据库?

How to restore a Firebird database in a Python script using FDB?

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

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

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

我想在 Python 脚本中使用 fdb (Firebird Embedded) 做同样的事情,但它不起作用!

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(主机='localhost', 用户='user', 密码='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()

数据库错误: ('Services/isc_service_attach:\n- SQLCODE: -902\n- Unable to complete network request to host "localhost".\n- Failed to establish a connection.', -902, 335544721)

假设您想使用 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)

即显式加载与 Firebird embedded 关联的 fbclient.dll(另见 ),不要在 fdb.services.connect 中指定主机名,因此它将使用 Firebird Embedded 服务经理而不是尝试连接到本地主机 Firebird 服务器(在您的情况下不是 运行)。

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