我想在分配给 SQLAlchemy 中的映射表对象期间将值更改为不同的格式,然后在选择行时对该列执行反向格式化。
# Adds a row with a formatted start_time="20230301-120000"
my_table_row = MyTable(start_time="2023-03-01 12:00:00")
session.add(my_table_row)
session.flush()
# Returns a MyTable object with an inverse formatted start_time="2023-03-01 12:00:00"
result = session.execute(
select(MyTable).filter_by(start_time="20230301-120000")
).scalar_one()
我正在尝试根据
this使用
@property
和@attr.setter
装饰器。但是,这些值是在没有任何格式更改的情况下从数据库中添加和检索的。
from sqlalchemy.orm import DeclarativeBase, mapped_column, Mapped
from sqlalchemy import Table, Column, Integer, String
class Base(DeclarativeBase):
pass
class MyTable(Base):
__table__ = "test_table"
_start_time: Mapped[str] = mapped_column("start_time", String(23), nullable=True, index=True)
@property
def start_time(self):
return convert_from_db_format(self._start_time)
@start_time.setter
def start_time(self, start_time):
self._start_time = convert_to_db_format(start_time)
我在这里做错了什么?
setter
convert_to_db_format()
工作正常,但是当我添加 getter
convert_from_db_format()
时,它似乎在插入 DB 之前反转了设置器的效果。