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