【发布时间】:2019-08-13 14:25:49
【问题描述】:
我有一个数据模型,用于存储以逗号 (1,2,3,4,5...) 分隔的值列表。
在我的代码中,为了使用arrays 而不是string,我定义了这样的模型:
class MyModel(db.Model):
pk = db.Column(db.Integer, primary_key=True)
__fake_array = db.Column(db.String(500), name="fake_array")
@property
def fake_array(self):
if not self.__fake_array:
return
return self.__fake_array.split(',')
@fake_array.setter
def fake_array(self, value):
if value:
self.__fake_array = ",".join(value)
else:
self.__fake_array = None
这很完美,从我的源代码的角度来看,"fake_array" 是一个数组,它只有在存储在数据库中时才会转换为string。
当我尝试按该字段过滤时出现问题。这样的表达式不起作用:
MyModel.query.filter_by(fake_array="1").all()
我似乎无法使用 SqlAlchemy 查询模型进行过滤。
我可以在这里做什么?有没有办法过滤这种字段? "fake_array" 问题是否有更好的模式?
谢谢!
【问题讨论】:
-
想象这是纯 SQL,您的查询会是什么样子?或者您是否接受查询不过滤但之后在 Python 中过滤的解决方案?
-
我希望这样:MyModel.query.filter_by(fake_array="1").all() --> Select * From MyModel where fake_array = '1'
-
还有这个事件:MyModel.query.filter(MyModel.fake_array.like('%1%')).all() --> Select * From MyModel where fake_array like '%1%'
标签: python python-3.x sqlalchemy flask-sqlalchemy