Django:我们可以使用 django ORM 将 dict 直接加载到数据库吗

Posted

技术标签:

【中文标题】Django:我们可以使用 django ORM 将 dict 直接加载到数据库吗【英文标题】:Django: can we load dict directly to the database using django ORM 【发布时间】:2020-01-31 16:40:26 【问题描述】:

我有很多像'title':'***' 这样的字典数据,其中的键类似于表列名。我想使用 django ORM 将所有 dict 直接加载到数据库中。

【问题讨论】:

相似还是相同?您是否有想要在 Django 项目中使用的现有(旧版)数据库?无论哪种情况,您都应该有模型,请包括它们。 我正在使用 SQLite 并定义了模型 您可能希望将数据格式化为例如json 并使用loaddata 命令。 我想在 django 视图中进行操作 【参考方案1】:

某些数据库(例如 postgreSQL)内置了对复杂类型(例如列表和 JSON 块)的支持。不幸的是 SQLite 没有。但我们仍然可以完成它。

您需要创建一个自定义字段,将字典序列化和反序列化为 JSON 以供存储和使用。

This Medium 文章给出了很好的概述和解释,但是你关心的部分我复制在下面

    class JSONField(Field):
        def db_type(self, connection):
            return 'text'

        def from_db_value(self, value, expression, connection):
            if value is not None:
                return self.to_python(value)
            return value

        def to_python(self, value):
            if value is not None:
                try:
                    return json.loads(value)
                except (TypeError, ValueError):
                    return value
            return value

        def get_prep_value(self, value):
            if value is not None:
                return str(json.dumps(value))
            return value

        def value_to_string(self, obj):
            return self.value_from_object(obj)

【讨论】:

以上是关于Django:我们可以使用 django ORM 将 dict 直接加载到数据库吗的主要内容,如果未能解决你的问题,请参考以下文章

如何在django系统外使用django的ORM

Django models ORM基础操作--白话聊Django系列

Python全栈之路--Django ORM详解

Django框架之数据库ORM框架

python之路_django ORM相关补充

Django之ORM