2017-09-28 22 views
1

解決方法が見つかりませんでした。非常に負荷のコンパイル(40秒) に問題私が持っている:SQLALchemy遅延コンパイルクラス

  • より1200その後、クラス
  • 300列挙型
  • と多型継承の
  • 7レベルを操作するためのいくつかのカスタムプリミティブクラス
  • 一部1つのクラスの1対多および多対多である可能性があります。
  • 親子が1つのテーブルと関係を持っている可能性があります。

私はそれが大きなプロジェクトですが、私は〜100クラスをロードする必要があります。 それができる製品が存在するのですか、カスタムクラスマップとカスタムファクトリを作成する必要がありますか?

答えて

0

このタスクを実行するには、継承と主キーを持つクラスのみを作成します。

手順は次のとおりです。私は1つの引数(クラス名)がすでにロードされていないかどうかを確認し、属性、FOREIGN_KEYSとの関係を作成取る機能、somethinkようclass.attrib=Column(String)

2)オーバーライドを書いた後

1)クラスを作成するための定義__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) 

を知らないそして今、それは、(iがobjを削除することはできませんpefectではなく、働いていましたect、負荷関連のクラスの前)ですが、処理中です