我使用Mongoengine(版本:0.9.0)和Django(版本:1.8)。 这是我的settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.dummy'
}
}
MONGO_DBNAME = "mydatabasename"
MONGO_HOSTNAME = "localhost"
connect(MONGO_DBNAME, host=MONGO_HOSTNAME)
我想为应用程序安装灯具。我在myapp / fixtures / location中创建了initial_data.json。
当我运行命令python manage.py dumpdata
时,出现以下错误:
CommandError:无法序列化数据库:settings.DATABASES配置不正确。请提供ENGINE值。检查设置文档以获取更多详细信息。
问题:
1)此问题的解决方法是什么?
2)是否有其他方法可以加载初始数据?
References此链接
谢谢
答案 0 :(得分:0)
Mongoengine是一个后端(在django术语中)。它有自己的模型(模式)和DOM(像docuemnt db中的ORM),但它没有Django后端适配器。
你可以使用它。但是在使用开箱即用的Django解决方案(如测试,夹具等)时会遇到问题。 你需要编写自己的装载机,但却是真实的。
我在这里看到两个选项:
我编写自己的夹具加载器进行测试。 我有一个json文件,其中映射所有fixture文件生病需要加载到db。 这是一个快速的例子:
import bson
import os
from django.conf import settings
from mongoengine.connection import get_db
def _get_db(self):
self.db = get_db()
def _load_fixtures(self, clear_before_load=True):
"""
Load to db a fixtures from folder fixtures/{{DB_NAME}}/{{COLLECTION_NAME}} before each test.
In file fixtures.json mapped collection name and file name for it.
"""
fixture_path = lambda file_name: os.path.join(settings.FIXTURES_DIR, self.db.name, file_name)
with open(settings.COLLECTION_FIXTURES_PATH) as file_object:
db_collections = loads(file_object.read())
for collection_name, filename in db_collections.items():
collection = self.db[collection_name]
if clear_before_load:
collection.remove()
path = fixture_path(filename)
if os.path.exists(path) and os.path.isfile(path):
with open(path, 'r') as raw_data:
collection_data = bson.decode_all(raw_data.read())
for document in collection_data:
collection.save(document)
答案 1 :(得分:0)
mongoengine
上没有对灯具的支持,我认为mongoengine
团队从版本0.9.0开始继续插件。
我最终为mongoDB加载初始数据的目的是在我的项目文件夹中创建一个名为startup.py
的脚本。
startup.py:
from {{app}}.models import Sample
def init():
if Sample.objects(name="test").count() == 0: # a flag to prevent initial data repetition
Sample(name="test").save()
接下来是在Django的创业公司上运行这个脚本。 Django项目的入口点是DJANGO_SETTINGS_MODULE
首次加载wsgi.py
时:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{project_name}}.settings")
import {{project_name}}.startup as startup
startup.init()
application = get_wsgi_application()
使用此设置,当您运行python manage.py runserver
时,init()
上的startup.py
将会运行,您设置的数据将会插入到数据库中。
希望这有帮助。