我是Flask的新手,已经开始使用Flask-AppBuilder
设计库存管理数据库的前端。
我已经创建了几个模型,并且已经设法使用Flask-AppBuilder
的{{1}}在表格中显示我的sqlite数据。
但是,我似乎无法找到等效的SQLite views
子句来过滤或“限制”列数据。我已经阅读了很多有关WHERE
,过滤器,查询的内容,但这使我更加困惑,其他任何事情以及执行一件非常简单的事情的解释似乎都非常详尽和复杂。
假设我们在Flask-AppBuilder中重现以下SQLite查询:
sqlalchemy
具有:
SELECT Field_A
FROM Table_A
WHERE Field_A = 'some text'
上面的代码行在我的应用程序中放在哪里?
考虑到我有以下result = session.query(Table_A).filter_by(Field_A = 'some text').all()
:
Class
和class Table_A(Model):
id = Column(Integer, primary_key=True)
Field_A = Column(String)
def __repr__(self):
return self
:
View
答案 0 :(得分:0)
SQLALchemy是一个ORM(对象关系映射),这意味着您不必处理原始SQL,您将调用“构建”的函数(在情况下添加过滤器)。它将透明地生成一个SQL查询,执行该查询,并将结果作为python对象返回。
我建议您再次仔细阅读sqlalchemy文档中有关过滤器的内容,尤其是filter_by: http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.filter_by
这是对SQLalchemy应用WHERE
的最简单方法。
如果您正确声明了Table_A
的模型,则应该可以这样使用它:
result = session.query(Table_A).filter_by(Field_A = 'some text').all()
此处session.query(Table_A).filter_by(Field_A = 'some text')
将生成SQL,.all()
将执行它。
答案 1 :(得分:0)
在进行大量挖掘之后,flask-appbuilder
使用了它自己的 filterclass 以便能够过滤视图。
在GitHub上引用了所有类: Flask Filter Clases List
此处FilterEqual
和FilterEqualFunction
之间的区别也不是:
What is the difference between : FilterEqual and FilterEqualFunction?
要进行Flask-appbuilder的其他自定义和第一个调用端口,请直接转到API Reference,在这里您将找到几个正在使用的 filterclass 的示例。
从本质上讲,这非常简单。在您要过滤的views.py
类中的ModelView
代码中,只需添加base_filters = [['field_A', FilterEqual, 'abc']]
即可,如下所示:
`class Table_AView(ModelView):
datamodel = SQLAInterface(Table_AView)
label_columns = {'Field_A':'A'}
list_columns = ['Field_A']
base_filters = [['field_A', FilterEqual, 'abc']]`
这只会显示field_A
变量等于abc
的行。
希望这对某人有帮助,因为我花了将近两个(em)(叹气)来弄清楚...