Я использую декларативный стиль для сопоставлений Sql Alchemy. В моей таблице есть столбец, в котором будут храниться части объекта в формате JSON. У меня есть хороший метод, отвечающий за создание JSON, и это то, что я хочу сохранить в моей БД.
Я отобразил поле в своем классе в виде столбца и попытался предоставить синоним для него, но обнаружил, что оно вызывается только при использовании кода. ORM никогда не обращается к получателю.
У меня вопрос: как я могу сказать SA, чтобы она получала значение для столбца из метода?
Вот как выглядит мой код:
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 = 'e@mail.com'
obj.name = 'Yeroc'
#save to db