跳转到主要内容

未提供项目描述

项目描述

CI Status

原因

用于加载和导出数据库数据为JSON的工具。

这些工具(部分)替换了Django内置的dumpdataloaddata管理命令。

假设您想要在系统之间逐步移动数据。在这种情况下,只知道已创建或更新的数据是不够的;您还想知道在此期间被删除的数据。Django的dumpdataloaddata管理命令仅支持前者,不支持后者。它们也不包括导出中的依赖对象。

此包提供了解决这些不足的实用程序和管理命令。

如何

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 (15.8 kB 查看哈希值)

上传时间

构建分发

feincms3_data-0.6.1-py3-none-any.whl (8.9 kB 查看哈希值)

上传时间 Python 3

支持