SQLALchemy懒惰的编译类

时间:2017-09-28 08:21:33

标签: python postgresql sqlalchemy

我还没有找到解决方案。非常负载编译中的问题(40秒) 我有:

  • 超过1200个课程
  • 300 enums
  • 和一些用于工作的自定义原始类
  • 7级多态继承
  • 一些本身的关系,可以在一个班级中与他人一对多和多对多
  • 父母和孩子可能与一张桌子有某种关系

我不明白,这是一个很大的项目,但在开发中我需要加载~100个类。 产品是否存在可以做到这一点,还是我需要创建自定义类映射和自定义工厂?

1 个答案:

答案 0 :(得分:0)

为了执行此任务,我只创建具有继承和主键的类。

步骤是:

1)之后我编写了一个函数,它接受一个参数(类名)检查它是否已经加载并创建属性,foreign_keys和relationship,有些想法如class.attrib=Column(String)

2)覆盖定义__new__以创建类,__getattr__用于查询,可能需要__setattr__,我不知道

  def __new__(cls,*args,**kwargs):
    if cls.__name__ not in sl_loaded_classes: sl_load_function(cls.__name__)
    return super(MyCLA,cls).__new__(cls)

  def __getattr__(self,attr):
    if "MyClass" not in sl_loaded_classes: sl_load_function("NameType")
    if False: pass
    elif attr=="relation" and "RelatedClass" not in sl_loaded_classes:
      sl_load_function("RelatedClass")
      for sl_class in gc.get_objects():
        if isinstance(sl_class,self.__class__):
          config.session.refresh(sl_class)
    else: return config.Base.__getattr__(self, attr)
    return getattr(self,attr)

现在它工作了,不是完美的(我无法删除对象,在加载相关的类之前),但它正在进行中