Skip to main content
 首页 » 编程设计

python之如何在 Django 的数据库中存储具有复杂数据字段的 python 对象

2024年10月25日34langtianya

我有一个具有复杂数据结构的 python 类。它具有嵌套的对象列表和字典以及纯数据。

class NK_Automata(object): 
    def __init__(self,p_N=5,p_K=5,p_functionsList=None,p_linksList=None): 
        self.N=p_N 
        self.K=p_K 
 
        if p_functionsList==None: 
            p_functionsList=[] 
        else: 
            self.functionsList= p_functionsList   #list of BinFunction objects 
 
        if p_linksList==None: 
            self.linksList=[] 
        else: 
            self.linksList=p_linksList            #list of lists of integers 
 
        self.ordinalNumber=-1 
 
 
        self.stateSpan={}                     #stateSpan: {currentStateNumber: nextStateNumber,...} 
        self.stateList=[]                     #list of integers 
        self.attractorDict={}                 #attractorDict: {attractorNumber:[size,basinSize],...} 
 
        self.attractorStatesDict ={}          #attractorStatesDict: {attractorStateNumber:[nextAttractorStateNumber,attractorStateWeight],...} 

我应该如何将它存储在数据库(sqlite3)中?如何为这个对象制作一个 Django 模型?我应该序列化对象吗?

更新 按照建议修复了默认参数

请您参考如下方法:

你可能想看看django-picklefield .

django-picklefield 提供了 pickled 对象字段的实现。此类字段可以包含任何可腌制对象。

基本上,这将采用任何 Python 对象,保存它的 pickled 表示,并且在从数据库中提取 pickled 表示后,您可以将其重新创建为完全相同的对象。

您可能想要创建一个模型对象 NK_Automata 将这些属性中的每一个存储在 picklefield 中,然后创建一个方法来重新创建具有所有属性的实际类对象。我不能向您保证整个类都是可腌制的,但可以将整个 NK_Automata 类实例存储在一个字段中。