我想知道在使用Django ORM时,将pickle对象存储到PostgreSQL数据库中最简单的方法是什么。将原始答案翻译成中文为"最初的回答"。
BinaryField
存储被封装的对象。JSONField
存储类实例中的字典。可以像这样实现:from django.contrib.postgres.fields import JSONField
class YourModel(models.Model):
data = <b>JSONField()</b>
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()
y = YourModel.objects.first()
some_instance = YourClass()
some_instance.__dict__.update(y.data)
print(some_instance)
# 'Your Class: 1, 2, 3'
我不会评论在数据库中使用打包数据是否明智。但是您可以使用django-picklefield
库存储打包数据:
import json; json.dumps(ClassInstance.__dict__)
的方法来还原类,但我不太确定...也许可以创建一个替代构造函数,并使用字典调用它? - Nate Schultz