我有以下用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?请帮帮我..
答案 0 :(得分:1)
没关系。我从site得到了很少研究的答案。我所做的是创建了一个 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设置不能为空。。
答案 1 :(得分:0)
您的代码在IDE中工作但在命令行中工作的原因可能是您在使用Python环境运行代码方面存在差异。
我做了几个测试:
安装了eulexistdb
的Virtualenv,但不是 Django。 eulexistdb
尝试加载django.conf
但失败,因此不会尝试从Django配置中获取其配置。最终,您的代码运行没有错误。
Virtualenv与' eulexistdb *and* Django:
eulexistdb tries to load
django.conf`并获得成功。然后我尝试从Django配置获取配置但是失败。我收到您在问题中描述的相同错误。
为了防止出现Django安装错误,可以通过添加Django配置来解决问题,就像在accepted self-answer中一样。但是如果您编写的代码没有使用Django,那么有点迂回的方式来运行代码。解决问题的最直接方法是在创建timeout
实例的代码中添加ExistDB
参数:
self.db = db.ExistDB(
server_url="http://localhost:8080/exist", timeout=None)
如果你这样做,那么就不会有任何错误。将timeout
设置为None
会保留默认行为,但会阻止eulexistdb
查找Django配置。