2011-01-04 11 views
0

Sql Alchemyマッピングに宣言スタイルを使用しています。テーブルの上にオブジェクトの一部をJSONとして格納する列があります。私はJSONを作成するための素晴らしいメソッドを持っており、それは私のDBに格納されているものです。SQL Alchemy ORM Getter

私は自分のクラスのフィールドを列としてマップしており、同義語を提供しようとしましたが、コードを消費することによって呼び出されることがわかりました。 ORMはゲッターに決してアクセスしません。

私の質問は、メソッドからカラムの値を取得するためにSAにどのように伝えることができますか? TypeDecoratorを使用するときには、このようなカスタムタイプを作成するために、実際には非常に簡単です

class JsonProperty(object): 
    _value = None 

    def __get__(self, instance, owner): 
     if instance is None: 
      return self 

     return self._value 

    def __set__(self, instance, value): 
     self._value = value 

class TableTestParent(Base,object): 
    __tablename__ = 'Test' 

    id = Column(Integer, primary_key=True) 
    age = Column(Integer) 
    name = Column(String) 
    _model = Column('model',String) 

    @synonym_for('_model') 
    @property 
    def model(self): 
     return self._modelToJson() 

    def _modelToJson(self): 
     dict = {} 
     for item in self.__class__.__dict__.iteritems(): 
      if type(item[1]) is JsonProperty: 
       attName = item[0] 
       attValue = getattr(self,attName,'') 
       dict[attName] = attValue 
     return json.dumps(dict) 

class TableTest(TableTestParent): 
    email = JsonProperty() 
    phone = JsonProperty() 
    bestTimes = JsonProperty() 

obj = TableTest() 
obj.email = '[email protected]' 
obj.name = 'Yeroc' 
#save to db 

答えて

2

http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/types.html#sqlalchemy.types.TypeDecorator

しかし...あなたが持っていない場合、ここで

は次のように私のコードが見えるものです特にjsonに依存するものは、カスタムjsonタイプの代わりにPickleTypeを使用することをおすすめします:http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/types.html#sqlalchemy.types.PickleType

ここではmaとにかくjson列が動作する:

class JsonType(types.TypeDecorator): 
    impl = types.Unicode 

    def process_bind_param(self, value, dialect): 
     return json.dumps(value) 

    def process_result_value(self, value, dialect): 
     return json.loads(value) 
+0

私はこれを正解として残しておきますが、私の場合、挿入/更新前と挿入後にエンティティ全体にアクセスする必要があります。どういうわけか、私はMapper Eventsを見逃してしまいました。 http://www.sqlalchemy.org/docs/orm/interfaces.html –

関連する問題