未提供项目描述
项目描述
原因
用于加载和导出数据库数据为JSON的工具。
这些工具(部分)替换了Django内置的dumpdata和loaddata管理命令。
假设您想要在系统之间逐步移动数据。在这种情况下,只知道已创建或更新的数据是不够的;您还想知道在此期间被删除的数据。Django的dumpdata和loaddata管理命令仅支持前者,不支持后者。它们也不包括导出中的依赖对象。
此包提供了解决这些不足的实用程序和管理命令。
如何
pip install feincms3-data.
将feincms3_data添加到INSTALLED_APPS,以便发现包含的管理命令。
在某个地方添加描述您要转储的模型和关系的数据集,例如在名为 app.f3datasets 的模块中
from feincms3_data.data import (
specs_for_app_models,
specs_for_derived_models,
specs_for_models,
)
from app.dashboard import models as dashboard_models
from app.world import models as world_models
def districts(args):
pks = [int(arg) for arg in args.split(",") if arg]
return [
*specs_for_models(
[world_models.District],
{
"filter": {"pk__in": pks},
"delete_missing": True,
},
),
*specs_for_models(
[world_models.Exercise],
{
"filter": {"district__in": pks},
"delete_missing": True,
},
),
# All derived non-abstract models which aren't proxies:
*specs_for_derived_models(
world_models.ExercisePlugin,
{
"filter": {"parent__district__in": pks},
"delete_missing": True,
},
),
]
def datasets():
return {
"articles": {
"specs": lambda args: specs_for_app_models(
"articles",
{"delete_missing": True},
),
},
"pages": {
"specs": lambda args: specs_for_app_models(
"pages",
{"delete_missing": True},
),
},
"teachingmaterials": {
"specs": lambda args: specs_for_models(
[
dashboard_models.TeachingMaterialGroup,
dashboard_models.TeachingMaterial,
],
{"delete_missing": True},
),
},
"districts": {
"specs": districts,
},
}
将Python模块路径添加到specs函数的设置中
FEINCMS3_DATA_DATASETS = "app.f3datasets.datasets"
现在,要转储例如页面,您将运行
./manage.py f3dumpdata pages > tmp/pages.json
要转储具有主键42和43的行政区,您将运行
./manage.py f3dumpdata districts:42,43 > tmp/districts.json
生成的JSON文件有三个顶级键
"version": 1:转储的版本,因为没有版本控制转储是未来痛苦的原因。
"specs": [...]:模型规范列表。
"objects": [...]:模型实例列表;使用与Django的 dumpdata 相同的序列化程序,一切看起来都一样。
模型规范包含以下字段
"model":模型的lowercased标签(app_label.model_name)。
"filter":一个字典,可以作为关键字参数传递给 .filter() 查询集方法;用于确定要转储的对象和加载后要删除的对象。
"delete_missing":此标志使加载器删除在转储中不存在的匹配 "filter" 的所有对象。
"ignore_missing_m2m":应忽略相关模型删除的列字段名称列表。当只在不同数据库之间部分转移内容时,这可能特别有用。
"save_as_new":如果存在且为真,则使用新的主键将对象插入数据库,而不是(可能)覆盖现有的对象。
"defer_values":应在加载时接收随机垃圾,而稍后才能接收其实际值的字段列表。当加载部分图时,这特别有用以避免唯一约束错误。
可以通过运行以下命令将转储重新加载到数据库中
./manage.py f3loaddata -v2 tmp/pages.json tmp/districts.json
每个转储都在单个事务中处理。首先将数据加载到数据库中;最后,从数据库中删除数据 匹配 过滤器但主键不在转储中的数据(如果 "delete_missing": True)。
项目详细信息
feincms3_data-0.6.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d475289cc4a63e8ce75ce399a64cc51f9b9b4dac91cbeef58e510f8a0cfe80d3 |
|
MD5 | a58a32a11dcaec0f75c8263b29a0aa06 |
|
BLAKE2b-256 | 4ac6aab04a58ef643b8f109f817717a148c133f6695bcd0ea33dbdd584eddecb |