1

我是 Flask 的新手,已经开始使用Flask-AppBuilder.

我创建了几个模型,并设法使用Flask-AppBuilder's在表中显示我的 sqlite 数据views

但是,我似乎无法找到等效的 SQLiteWHERE子句来过滤或“限制”列数据。我一直在阅读很多关于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']
4

2 回答 2

1

经过大量挖掘flask-appbuilder使用它自己的过滤器,以使您能够过滤您的视图。

所有的类都在 GitHub 上引用: Flask Filter Classes List

也不是FilterEqualFilterEqualFunction这里 的区别:FilterEqual 和 FilterEqualFunction 之间有什么区别?

对于 Flask-appbuilder 的其他自定义和第一个调用端口,请直接访问API 参考,您将在其中找到几个过滤器类的示例

本质上它非常简单。在要过滤views.py的类中的代码中,只需像这样添加:ModelViewbase_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

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

于 2018-09-08T16:01:32.430 回答
0

SQLALchemy 是一个 ORM(对象关系映射),这意味着您不必处理原始 SQL,您将调用您“构建”的函数(通过在您的情况下添加过滤器)。它将透明地生成一个 SQL 查询,执行它,并将结果作为 python 对象返回。

我建议您再次仔细阅读有关过滤器的 sqlalchemy 文档,尤其是 filter_by: http ://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.filter_by

这是WHERE使用 sqlalchemy 应用 a 的最简单方法。如果您已经正确声明了 的模型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()并将执行它。

于 2018-09-05T01:59:57.247 回答