在我的数据库中,我有一些列,其中数据以某种奇怪的格式存储.由于数据库也被其他代码使用,我无法更改数据格式.
例如,一种奇怪的格式是时间值表示为字符串23:42:30.我想有一些魔法可以让我总是datetime.time在python端使用对象.
一个非常简单的解决方案是:
col_raw = Column('col', String(7))
@property
def col(self):
return datetime.strptime(self.col_raw, '%H:%M:%S').time()
@col.setter
def colself, t):
self.col_raw = t.strftime('%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
但是,这只能解决读写数据的问题.像这样的东西是不可能的:
Table.query.filter(Table.col == time(23,42,30))
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用混合扩展.这样,查询就有可能,但如果我看得正确,写不会.此外,它需要编写两次编码,一次是在python代码中,一次是在SQL代码中.(其他问题:我不确定转换是否只能使用SQL代码编写.)
真的没有办法将两者结合起来吗?比如我定义了两个功能,比方说python2sql和sql2python,这SQLAlchemy的使用从Python对象的值转换透明地向字符串和后面?我知道,这会使一些查询不可能的,比如between或like或款项之类的,不过没关系.
请记住,时间只是我需要转换数据的情况之一; 所以请尽量保持回复的通用性.