Для модели ячейки, определенной:
class Cell(db.Model):
""" model for Base Cells """
id = db.Column(db.Integer, primary_key=True,
autoincrement=True, index=True)
row_id = db.Column(
db.Integer,
db.ForeignKey("base_row.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
row_ref = db.relationship(
"BaseRow", backref=db.backref("cell_row", cascade="all"))
column_id = db.Column(
db.Integer,
db.ForeignKey("base_column.id", ondelete="CASCADE"),
nullable=False,
index=True,
)
column_ref = db.relationship(
"BaseColumn", backref=db.backref("cell_column", cascade="all")
)
value = db.Column(MutableDict.as_mutable(JSONB))
, значение представляет собой json изменяемый кодированный dict:
class JsonEncodedDict(db.TypeDecorator):
"""Enables JSON storage by encoding and decoding on the fly."""
impl = db.Text
def process_bind_param(self, value, dialect):
if value is None:
return "{}"
else:
return json.dumps(value)
def process_result_value(self, value, dialect):
if value is None:
return {}
else:
return json.loads(value)
mutable.MutableDict.associate_with(JsonEncodedDict)
Поле value
в ключе хранилищ модели пары значений в следующем формате:
{'KEY': value}
for date:
{'DATE': date in a '%d-%m-%Y , %H-%M-%S' format}
Я попытался ввести @hybrid_property
следующим образом:
@hybrid_property
def datetime(self):
if self.value['DATE'] is not None:
date_string = str(self.value['DATE'])
return date_string
else:
return None
@datetime.expression
def datetime(cls):
if cls.value['DATE'] is not None:
date_string = str(cls.value['DATE'])
return func.Date(date_string)
else:
return None
это вызывает ошибку:
DataError: (psycopg2.errors.InvalidDatetimeFormat) invalid input syntax for type date: "cell.value[:value_1]"
LINE 3: WHERE Date('cell.value[:value_1]') > '2020-06-18T23:17:12.45...
Как для получения даты и времени в значениях, если значение содержит поле DATE?