Flask 中的 SQLAlchemy — Flask 文档
Flask 中的 SQLAlchemy
许多人更喜欢 SQLAlchemy 进行数据库访问。 在这种情况下,鼓励为您的烧瓶应用程序使用包而不是模块,并将模型放入单独的模块(Larger Applications)。 虽然这不是必需的,但它很有意义。
有四种非常常见的使用 SQLAlchemy 的方法。 我将在这里概述它们中的每一个:
Flask-SQLAlchemy 扩展
因为 SQLAlchemy 是一个通用的数据库抽象层和对象关系映射器,需要一些配置工作,所以有一个 Flask 扩展可以为您处理。 如果您想快速入门,建议您这样做。
您可以从 PyPI 下载 Flask-SQLAlchemy。
声明式
SQLAlchemy 中的声明式扩展是使用 SQLAlchemy 的最新方法。 它允许您一次性定义表和模型,类似于 Django 的工作方式。 除了以下文本,我还推荐有关 declarative 扩展的官方文档。
这是您的应用程序的示例 database.py
模块:
要定义您的模型,只需对上面代码创建的 Base 类进行子类化。 如果您想知道为什么我们不必在这里关心线程(就像我们在上面的 SQLite3 示例中使用 g 对象所做的那样):那是因为 SQLAlchemy 已经使用 [ X201X]。
要以声明方式在您的应用程序中使用 SQLAlchemy,您只需将以下代码放入您的应用程序模块中。 Flask 将在请求结束或应用程序关闭时自动删除数据库会话:
这是一个示例模型(将其放入 models.py
,例如):
要创建数据库,您可以使用 init_db 函数:
您可以像这样将条目插入到数据库中:
查询也很简单:
手动对象关系映射
与上面的声明式方法相比,手动对象关系映射有一些优点和一些缺点。 主要区别在于您分别定义表和类并将它们映射到一起。 它更灵活,但打字要多一些。 一般来说,它的工作方式类似于声明式方法,因此请确保还将您的应用程序拆分为一个包中的多个模块。
这是您的应用程序的示例 database.py
模块:
与声明式方法一样,您需要在每个请求或应用程序上下文关闭后关闭会话。 将其放入您的应用程序模块中:
这是一个示例表和模型(将其放入 models.py
):
查询和插入的工作方式与上面的示例完全相同。
SQL抽象层
如果您只想使用数据库系统(和 SQL)抽象层,您基本上只需要引擎:
然后你可以像上面的例子一样在你的代码中声明表,或者自动加载它们:
要插入数据,您可以使用 insert 方法。 我们必须先获得连接才能使用事务:
SQLAlchemy 会自动为我们提交。
要查询您的数据库,您可以直接使用引擎或使用连接:
这些结果也是类似字典的元组:
您还可以将 SQL 语句字符串传递给 execute()
方法:
有关 SQLAlchemy 的更多信息,请访问 网站 。