以编程方式设置 BaseX Document/Database 上下文

Setting the BaseX Document/Database context programmatically

我正在尝试通过 Python API 以编程方式设置 database/document 上下文。我的步骤如下:

session = BaseXClient.Session("localhost", 1984, "admin", "admin")
query = session.query("//node")
query.context("doc('dbname')") # **NOT SURE HOW TO SET THE DB TO USE**
query.execute()

我已经知道我可以简单地按如下方式使用会话对象并且它工作正常:

session.execute("xquery doc('dbname')//node/child")

但我正在寻找一种在程序调用范围内与查询字符串分开打开数据库的方法。在使用上下文对象执行查询之前,我无法找到明确设置数据库的文档。我查看了 python BaseXClient 的源代码,并且 Query() 实例的上下文方法没有得到很好的记录。我正在尝试使用它来设置数据库,但运气不佳。

您提供的上下文只是一个字符串。它没有被评估。在客户端服务器上下文中,很难看出如何在此处传入数据库。

我认为您的替代方法是在 运行 查询之前使用 execute 命令打开数据库。这将设置上下文。例如

var q = session.execute("open mydatabase",log.print)
var q = session.query("count(*)")

或者使用查询命令bind命令传递参数

var q = session.query("declare variable $db external;  count(collection($db))")
q.bind("db", "mydatabase","",log.print);
q.execute(log.print);

抱歉,这些示例使用了 Javascript 和我的 BaseX Node client,因为我不熟悉 Python API,但我相信这同样适用于 Python API