Django模型中的Python Pickle对象

3
我想知道在使用Django ORM时,将pickle对象存储到PostgreSQL数据库中最简单的方法是什么。将原始答案翻译成中文为"最初的回答"。

你想使用pickle而不是像Django模型一样提供的其他东西,有特定的原因吗?Pickle并不是非常便携。 - Chris
1
请不要这样做。如果将来更新Python版本,您可能会遇到麻烦。只需使用JSON或类似的东西即可。 - Selcuk
非常感谢您的建议。是否有一个模块可以将类对象转换为JSON,并且还可以重新转换回原始对象? - Luis Alberto Pérez De La Cruz
1
你可以使用类似于 import json; json.dumps(ClassInstance.__dict__) 的方法来还原类,但我不太确定...也许可以创建一个替代构造函数,并使用字典调用它? - Nate Schultz
... 但是,再次问一遍,为什么?你明确表示正在尝试将对象存储在Postgres数据库中。如果它们是Django模型,则可以无需使用JSON或任何其他序列化格式即可完成。 - Chris
2个回答

3
您可以使用 BinaryField 存储被封装的对象。
根据问题评论,您也可以使用 JSONField 存储类实例中的字典。可以像这样实现:
from django.contrib.postgres.fields import JSONField

class YourModel(models.Model):
    data = <b>JSONField()</b>

假设您有以下类(需要存储):
```html

Lets say you have a class like this(which you want to store):

```
class YourClass(object):
    a = None
    b = None
    c = None

    def __str__(self):
        return 'Your Class: {}, {}, {}'.format(self.a, self.b, self.c)

现在你可以这样生成字典:
some_instance = YourClass(a=1, b=2, c=3)
cls_dict = some_instance.__dict__
print(cls_dict)
# {'a': 1, 'b': 2, 'c': 3}

y = YourModel(data=cls_dict)
y.save()

现在你可以尝试像这样从字典中恢复Class实例:
y = YourModel.objects.first()
some_instance = YourClass()
some_instance.__dict__.update(y.data)

print(some_instance)

# 'Your Class: 1, 2, 3'

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接