以编程方式设置BaseX文档/数据库上下文

时间:2019-01-09 20:22:34

标签: python-3.x basex

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

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()实例的上下文方法没有很好的文档说明。我试图用它来设置数据库,但运气不佳。

1 个答案:

答案 0 :(得分:1)

您提供的上下文只是一个字符串。不评估。在客户端服务器环境中,很难在这里看到如何传递数据库。

我认为您可以选择使用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中同样适用