代码之家  ›  专栏  ›  技术社区  ›  Tolstov Sergey

SQLALchemy懒惰编译类

  •  1
  • Tolstov Sergey  · 技术社区  · 7 年前

    我还没有找到解决办法。负载编译时出现问题(40秒)

    • 超过1200个班级
    • 一些自身的关系,可能是一个类中的一对多和多对多对自身
    • 父母和孩子可能与一个表有某种命名关系

    我不理解,这是一个大项目,但在开发中,我需要加载约100个类。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tolstov Sergey    7 年前

    步骤是:

    1) 在那之后,我编写了一个函数,它接受一个参数(类名)检查它是否尚未加载,并创建属性、外键和关系,比如 class.attrib=Column(String)

    __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)