Flask-AppBuilder 相当于 SQLite WHERE 子句来过滤列数据
Flask-AppBuilder equivalent of SQLite WHERE clause to filter column data
我是 Flask 的新手,已经开始使用 Flask-AppBuilder
为库存管理数据库设计前端。
我已经创建了几个模型,并且已经成功地使用 Flask-AppBuilder
的 views
在表格中显示我的 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
这里也不是FilterEqual
和FilterEqualFunction
的区别:
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
的行。
希望这对某人有所帮助,因为我花了将近 (叹息) 两个星期才弄明白...
我是 Flask 的新手,已经开始使用 Flask-AppBuilder
为库存管理数据库设计前端。
我已经创建了几个模型,并且已经成功地使用 Flask-AppBuilder
的 views
在表格中显示我的 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
这里也不是FilterEqual
和FilterEqualFunction
的区别:
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
的行。
希望这对某人有所帮助,因为我花了将近 (叹息) 两个星期才弄明白...