为什么腌制的SQLAlchemy模型对象小于其腌制的`__dict__`?

时间:2015-04-22 01:50:07

标签: python sqlalchemy

恢复对象需要存储在__dict__中的相同属性,对吗?

1 个答案:

答案 0 :(得分:1)

我认为SQLAlchemy RowProxy使用_row(一个元组)来存储值。它没有__dict__,因此每行_dict__没有存储开销。它的_parent对象具有将列名存储为元组查找中的索引pos的字段。如果你试图减少sql获取结果大小,那么很常见的事情 - 列表对于同一个select的每一行总是相同的,所以你依靠一个共同的父来跟踪元组的哪个索引保持不变哪一列而不是拥有自己的每行__dict __。

另外一个优点是,在db lib连接级别,sql游标返回(总是?)它们在元组中的值,因此您几乎没有处理开销。但直接的sql fetch只是一个光标描述&一堆断开的行,其中包含元组 - SQLALchemy将其连接起来并允许使用列名。

现在,关于unpickling流程如何进行,你必须看看实际的实现。