Python泡菜失去了d

2024-10-16 22:35:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有4个嵌套类,参见示例:

class GameInfo:
    id = ""
    round = ""
    # ... etc

class Opponent:
    game_info = GameInfo()
    name = ""
    # ...

class Tournament:
    opponent_list = [] # list of Opponent objects
    # ...

class Journal(db.Model):
    picked_tournament = db.BlobProperty()  # here I put picked Tournament object

问题是:当我在Journal中取消pickled_tournament时,GameInfo中的所有数据都将丢失。一、 e.opponent.name显示正确的值,但opponent.game_info.id显示空字符串。在

我使用googleappengine数据存储来存储数据,picked_tournament存储在BlobProperty()中。{cd7>调用数据。要加载数据,我使用:tournament = pickle.loads(journal.picked_tournament)

为什么泡菜的深度不超过2层?在

UPD:数据设置如下:

^{pr2}$

UPD2:刚刚发现,如果数据库是sqlite3,在development server上一切正常,但是没有sqlite3和appspot就不能工作!在


Tags: 数据nameinfoidgamedblistclass
2条回答

根据App Engine文档(我没有在实践中尝试过),尝试将pickle数据设置为blob:

journal.picked_tournament = db.Blob(pickle.dumps(tournament))

如果这不起作用,验证一下选秀比赛杂志== 泡菜、垃圾(锦标赛)。在

Opponent类的构造函数中,实例化了GameInfo的单个副本,该副本由该类的所有实例使用。例如:

>>> o1 = Opponent()
>>> o1.game_info.id = 5
>>> o2 = Opponent()
>>> o2.game_info.id
5

相反,您需要为每个对手实例创建一个。通过在构造函数中初始化它来执行此操作,如下所示:

^{pr2}$

另外,既然不是20世纪90年代,你真的应该使用new style classes。在

相关问题 更多 >