Flask-AppBuilder 相当于 SQLite WHERE 子句来过滤列数据

Flask-AppBuilder equivalent of SQLite WHERE clause to filter column data

我是 Flask 的新手,已经开始使用 Flask-AppBuilder 为库存管理数据库设计前端。

我已经创建了几个模型,并且已经成功地使用 Flask-AppBuilderviews 在表格中显示我的 sqlite 数据。

但是,我似乎无法找到 SQLite WHERE 子句的等效项来过滤或 "restrict" 列数据。我已经阅读了很多关于 sqlalchemy、过滤器、查询的内容,但这让我更加困惑,因为其他任何事情和解释似乎都非常详尽和复杂,无法做一些非常简单的事情。

假设我们在 Flask-AppBuilder 中重现以下 SQLite 查询:

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

class Table_AView(ModelView):
    datamodel = SQLAInterface(Table_AView)
    label_columns = {'Field_A':'A'}
    list_columns = ['Field_A']

SQLALchemy 是一个 ORM(对象关系映射),这意味着您不必处理原始 SQL,您将调用您 "build" (通过在您的案例中添加过滤器)。它将透明地生成一个 SQL 查询,执行它,并将 return 结果作为 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()会执行

经过大量挖掘 flask-appbuilder 使用它自己的 filterclass 来过滤您的观点。

所有 class 均在 GitHub 上引用: Flask Filter Clases List

这里也不是FilterEqualFilterEqualFunction的区别: What is the difference between : FilterEqual and FilterEqualFunction?

对于 Flask-appbuilder 的其他自定义和第一个调用端口,请直接转到 API Reference,在那里您可以找到 filterclass[= 的几个示例39=] 在行动中。

本质上非常简单。在 ModelView class 中的 views.py 代码中,您想要过滤只需添​​加 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 的行。

希望这对某人有所帮助,因为我花了将近 (叹息) 两个星期才弄明白...