0

我有以下用 python 编写的代码,以便使用 eulexistdb 模块与 ExistDB 通信。

from eulexistdb import db    
class TryExist:    
    def __init__(self):
        self.db = db.ExistDB(server_url="http://localhost:8899/exist")    
    def get_data(self, query):
        result = list()
        qresult = self.db.executeQuery(query)
        hits = self.db.getHits(qresult)
        for i in range(hits):
            result.append(str(self.db.retrieve(qresult, i)))
        return result

quer = '''
let $x:= doc("/db/sample/books.xml")
return $x/bookstore/book/author/text()
'''
a = TryExist()
myres = a.get_data(quer)
print myres

我很惊讶这段代码在 Aptana Studio 3 中运行良好,给了我想要的输出,但是当从其他 IDE 运行或使用命令“python.exe myfile.py”时会出现以下错误:

django.core.exceptions.ImproperlyConfigured: Requested setting EXISTDB_TIMEOUT, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

我使用自己的 localsetting.py 使用以下代码解决了这个问题:

import os
# must be set before importing anything from django
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings'
... writing link for existdb here...

然后我得到错误:

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

如何在 Django 中配置设置以适应 ExistDB?请帮帮我..

4

2 回答 2

1

没关系。我在这个网站上几乎没有研究就找到了答案。我所做的是创建了一个具有以下配置的localsetting.py文件。

EXISTDB_SERVER_USER = 'user'
EXISTDB_SERVER_PASSWORD = 'admin'
EXISTDB_SERVER_URL = "http://localhost:8899/exist"
EXISTDB_ROOT_COLLECTION = "/db"

在我的主文件myfile.py中,我使用了:

from localsettings import EXISTDB_SERVER_URL
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings.py'

在类 TryExist 中,我将 __ init __() 更改为:

def __init__(self):
        self.db = db.ExistDB(server_url=EXISTDB_SERVER_URL)

PS:仅使用os.environ['DJANGO_SETTINGS_MODULE'] = 'localsettings'会带来django.core.exceptions.ImproperlyConfigured:SECRET_KEY 设置不能为空。.

于 2013-08-16T03:26:52.690 回答
0

您的代码在 IDE 中工作但不能在命令行中工作的原因可能是您对用于运行代码的 Python 环境有所不同。

我做了几个测试:

  1. Virtualenveulexistdb已安装但未安装Djangoeulexistdb尝试加载django.conf但失败,因此不会尝试从 Django 配置中获取其配置。最终,您的代码运行无误。

  2. Virtualenv 与 'eulexistdb *and* Django:eulexistdb tries to loaddjango.conf' 并成功。然后我尝试从 Django 配置中获取配置,但失败了。我得到了您在问题中描述的相同错误。

为了防止出现 Django 安装错误,可以通过添加 Django 配置来解决问题,就像您在接受的 self-answer中所做的那样。但是,如果您正在编写的代码不使用 Django,那么让您的代码运行有点迂回。解决问题的最直接方法是简单地timeout在创建ExistDB实例的代码中添加一个参数:

    self.db = db.ExistDB(
        server_url="http://localhost:8080/exist", timeout=None)

如果你这样做,那么不会有任何错误。设置timeout为保留None默认行为,但阻止eulexistdb查找 Django 配置。

于 2015-10-16T22:01:34.557 回答