Flask-AppBuilder等效于SQLite WHERE子句以过滤列数据

时间:2018-09-04 22:48:58

标签: python-3.x flask flask-sqlalchemy flask-appbuilder

我是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

2 个答案:

答案 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

此处FilterEqualFilterEqualFunction之间的区别也不是: 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)(叹气)来弄清楚...