小编Mar*_*ian的帖子

SQLAlchemy:在内部和数据库格式之间来回转换列值

在我的数据库中,我有一些列,其中数据以某种奇怪的格式存储.由于数据库也被其他代码使用,我无法更改数据格式.

例如,一种奇怪的格式是时间值表示为字符串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代码编写.)

真的没有办法将两者结合起来吗?比如我定义了两个功能,比方说python2sqlsql2python,这SQLAlchemy的使用从Python对象的值转换透明地向字符串和后面?我知道,这会使一些查询不可能的,比如betweenlike或款项之类的,不过没关系.

请记住,时间只是我需要转换数据的情况之一; 所以请尽量保持回复的通用性.

python orm sqlalchemy data-conversion

9
推荐指数
1
解决办法
2754
查看次数

标签 统计

data-conversion ×1

orm ×1

python ×1

sqlalchemy ×1