添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
class flask_sqlalchemy. SQLAlchemy ( app=None , * , metadata=None , session_options=None , query_class=<class 'flask_sqlalchemy.query.Query'> , model_class=<class 'flask_sqlalchemy.model.Model'> , engine_options=None , add_models_to_shell=True , disable_autonaming=False )

将 SQLAlchemy 与 Flask 集成。这负责设置一个或多个引擎,将表和模型与特定引擎关联,并在每次请求后清理连接和会话。

只有引擎配置是特定于每个应用程序的,其他内容(如模型、表、元数据和会话)对于使用该扩展实例的所有应用程序都是共享的。调用 init_app() 以在应用程序上配置扩展。

创建扩展后,通过继承 Model 创建模型类,并通过 Table 创建表类。可以在调用 init_app() 之前访问这些类,从而可以将模型与应用程序分开定义。

访问 session engine 需要一个活动的 Flask 应用程序上下文。这包括使用引擎的方法,例如 create_all()

此类还提供对 SQLAlchemy 中 sqlalchemy sqlalchemy.orm 模块的名称的访问。例如,你可以使用 db.Column db.relationship 而不是导入 sqlalchemy.Column sqlalchemy.orm.relationship 。在定义模型时,这会很方便。

  • app ( Flask | None ) – 立即在此 Flask 应用程序上调用 init_app()

  • metadata ( sa.MetaData | None ) – 将此用作默认 sqlalchemy.schema.MetaData 。对于设置命名约定很有用。

  • session_options ( dict [ str , t.Any ] | None ) – session 用于创建每个会话实例的参数。一个 scopefunc 键将传递给范围会话,而不是会话实例。有关参数列表,请参阅 sqlalchemy.orm.sessionmaker

  • query_class ( type [ Query ] ) – 将此用作模型和动态关系的默认查询类。在 SQLAlchemy 中,查询接口被认为是过时的。

  • model_class ( _FSA_MCT ) – 在创建声明模型类 Model 时,将此用作模型基类。对于进一步的自定义,它也可以是一个完全创建的声明模型类。

  • engine_options ( dict [ str , t.Any ] | None ) – 创建每个引擎时使用的默认参数。这些优先级低于应用程序配置。有关参数列表,请参阅 sqlalchemy.create_engine()

  • add_models_to_shell ( bool ) – 将 db 实例和所有模型类添加到 flask shell

  • disable_autonaming ( bool ) –

  • 在 3.1.0 版本中更改: metadata 参数仍然可以与 SQLAlchemy 1.x 类一起使用,但在使用 SQLAlchemy 2.x 声明类样式时将被忽略。相反,在 Base 类上指定元数据。

    在 3.1.0 版本中更改: 添加了 disable_autonaming 参数。

    在 3.1.0 版本中更改: model_class 参数更改为接受 SQLAlchemy 2.x 声明基本子类。

    在 3.0 版本中更改: 始终需要一个活动的 Flask 应用程序上下文才能访问 session engine

    在 3.0 版本中更改: 每个绑定键都使用单独的 metadata

    在 3.0 版本中更改: engine_options 参数在引擎前配置之前作为默认值应用。

    在 3.0 版本中更改: 会话类可以在 session_options 中进行自定义。

    在 3.0 版本中更改: 添加了 add_models_to_shell 参数。

    在 3.0 版本中更改: 在调用 init_app 时创建引擎,而不是在首次访问它们时创建。

    在 3.0 版本中更改: 除了 app 之外的所有参数都是关键字限定的。

    在 3.0 版本中更改: 扩展实例直接存储为 app.extensions["sqlalchemy"]

    在 3.0 版本中更改: 设置方法使用前导下划线重命名。它们被视为可能随时更改的内部接口。

    在 3.0 版本中更改: 删除了 use_native_unicode 参数和配置。

    在版本 2.4 中更改: 添加了 engine_options 参数。

    在版本 2.1 中更改: 添加了 metadata query_class model_class 参数。

    在版本 2.1 中更改: session Model.query Query 中使用相同的查询类。

    在版本 0.16 中更改: scopefunc session_options 中被接受。

    在版本 0.10 中更改: 添加了 session_options 参数。

    Model

    一个 SQLAlchemy 声明模型类。子类化此类以定义数据库模型。

    如果一个模型没有设置 __tablename__ ,它将通过将类名从 CamelCase 转换为 snake_case 来生成。如果模型看起来像使用单表继承,它将不会被生成。

    如果一个模型或父类设置 __bind_key__ ,它将使用该元数据和数据库引擎。否则,它将使用默认的 metadata engine 。如果模型设置 metadata __table__ ,则忽略此设置。

    对于使用 SQLAlchemy 1.x API 的代码,通过子类化 Model 并将 model_class 参数传递给扩展来定制此模型。一个完全创建的声明模型类也可以被传递,以使用自定义元类。

    对于使用 SQLAlchemy 2.x API 的代码,通过子类化 sqlalchemy.orm.DeclarativeBase sqlalchemy.orm.DeclarativeBaseNoMeta 并将 model_class 参数传递给扩展来定制此模型。

    Table

    一个 sqlalchemy.schema.Table 类,它会自动选择元数据。

    与基本 Table 不同, metadata 参数不是必需的。如果没有给出,则根据 bind_key 参数进行选择。

  • bind_key – 用于选择不同的元数据。

  • args – 传递给基类的参数。这些通常是表的名称、列和约束。

  • kwargs – 传递给基类的参数。

  • create_all ( bind_key = '__all__' )

    通过为所有或部分绑定键调用 metadata.create_all() 来创建数据库中不存在的表。这不会更新现有表,请为此使用迁移库。

    这需要激活 Flask 应用程序上下文。

    bind_key ( str | None | list [ str | None ] ) – 要为其创建表的绑定键或键列表。默认为所有绑定。

    返回类型 :

    在版本 3.0 中更改: bind 参数重命名为 bind_key 。删除了 app 参数。

    在版本 0.12 中更改: 添加了 bind app 参数。

    drop_all ( bind_key = '__all__' )

    通过为所有或某些绑定键调用 metadata.drop_all() 来删除表。

    这需要激活 Flask 应用程序上下文。

    bind_key ( str | None | list [ str | None ] ) – 要从中删除表的绑定键或键列表。默认为所有绑定。

    返回类型 :

    在版本 3.0 中更改: bind 参数重命名为 bind_key 。删除了 app 参数。

    在版本 0.12 中更改: 添加了 bind app 参数。

    dynamic_loader ( argument , ** kwargs )

    一个 sqlalchemy.orm.dynamic_loader() ,它将此扩展的 Query 类应用于关系和反向引用。

    在版本 3.0 中更改: Query 类设置在 backref 中。

  • argument ( Any ) –

  • kwargs ( Any ) –

  • 返回类型 :

    RelationshipProperty [ Any ]

    属性 引擎 : 引擎

    当前应用程序的默认 引擎 ,如果 会话 模型 查询时未设置绑定键,则使用此引擎。

    要自定义,请设置 SQLALCHEMY_ENGINE_OPTIONS 配置,并通过将 engine_options 参数传递给扩展来设置默认值。

    这需要激活 Flask 应用程序上下文。

    属性 引擎 : 映射 [ 字符串 | , 引擎 ]

    当前应用程序的绑定键到 sqlalchemy.engine.Engine 实例的映射。 键引用默认引擎,并可用作 引擎

    要自定义,请设置 SQLALCHEMY_BINDS 配置,并通过将 engine_options 参数传递给扩展来设置默认值。

    这需要激活 Flask 应用程序上下文。

    版本 3.0 中的新增内容。

    first_or_404 ( statement , * , description = None )

    类似于 Result.scalar() ,但会中止并显示 404 Not Found 错误,而不是返回 None

  • statement ( Select ) – 要执行的 select 语句。

  • description ( str | None ) – 在错误页面上显示的自定义消息。

  • 返回类型 :

    版本 3.0 中的新增内容。

    get_or_404 ( entity , ident , * , description = None , ** kwargs )

    类似于 session.get() ,但会中止并显示 404 Not Found 错误,而不是返回 None

  • entity ( type [ _O ] ) – 要查询的模型类。

  • ident ( Any ) – 要查询的主键。

  • description ( str | None ) – 在错误页面上显示的自定义消息。

  • kwargs ( Any ) – 传递给 session.get() 的额外参数。

  • 返回类型 :

    在版本 3.1 中更改: 将额外的关键字参数传递给 session.get()

    版本 3.0 中的新增内容。

    init_app ( app )

    使用此扩展实例初始化 Flask 应用程序。在使用应用程序访问数据库引擎或会话之前,必须调用此方法。

    这会设置默认配置值,然后在应用程序上配置扩展并为每个绑定键创建引擎。因此,必须在应用程序配置之后调用此方法。此调用之后对应用程序配置的更改不会反映出来。

    使用 app.config 中的以下键

  • SQLALCHEMY_DATABASE_URI

  • SQLALCHEMY_ENGINE_OPTIONS

  • SQLALCHEMY_ECHO

  • SQLALCHEMY_BINDS

  • SQLALCHEMY_RECORD_QUERIES

  • SQLALCHEMY_TRACK_MODIFICATIONS

  • app ( Flask ) – 要初始化的 Flask 应用程序。

    返回类型 :
    metadatas : dict [ str | None , MetaData ]

    将绑定键映射到 sqlalchemy.schema.MetaData 实例。 None 键引用默认元数据,并作为 metadata 提供。

    通过将 metadata 参数传递给扩展来定制默认元数据。这可用于设置命名约定。当为另一个绑定键创建元数据时,它会复制默认的命名约定。

    版本 3.0 中的新增内容。

    one_or_404 ( statement , * , description = None )

    类似于 Result.scalar_one() ,但会中止,并显示 404 Not Found 错误,而不是引发 NoResultFound MultipleResultsFound

  • statement ( Select ) – 要执行的 select 语句。

  • description ( str | None ) – 在错误页面上显示的自定义消息。

  • 返回类型 :

    版本 3.0 中的新增内容。

    paginate ( select , * , page = None , per_page = None , max_per_page = None , error_out = True , count = True )

    根据当前页和每页项目数对选择语句应用偏移和限制,返回一个 Pagination 对象。

    该语句应选择一个模型类,如 select(User) 。这会对结果应用 unique() scalars() 修饰符,因此复合选择不会返回预期结果。

  • select ( Select ) – 要分页的 select 语句。

  • page ( int | None ) – 当前页,用于计算偏移。在请求期间默认为 page 查询参数,否则为 1。

  • per_page ( int | None ) – 一页上的最大项目数,用于计算偏移和限制。在请求期间默认为 per_page 查询参数,否则为 20。

  • max_per_page ( int | None ) – per_page 的最大允许值,用于限制用户提供的值。对于没有限制,使用 None 。默认为 100。

  • error_out ( bool ) – 如果没有返回任何项目且 page 不为 1,或者如果 page per_page 小于 1,或者如果它们都不是整数,则中止并显示 404 Not Found 错误。

  • count ( bool ) – 通过发出额外的计数查询来计算值的总数。对于非常复杂的查询,这可能不准确或速度较慢,因此可以禁用它并在必要时手动设置。

  • 返回类型 :

    在版本 3.0 中已更改: count 查询更高效。

    版本 3.0 中的新增内容。

    reflect ( bind_key = '__all__' )

    通过对所有或部分绑定键调用 metadata.reflect() 来从数据库加载表定义。

    这需要激活 Flask 应用程序上下文。

    bind_key ( str | None | list [ str | None ] ) – 用于反映表的绑定键或键列表。默认为所有绑定。

    返回类型 :

    在版本 3.0 中更改: bind 参数重命名为 bind_key 。删除了 app 参数。

    在版本 0.12 中更改: 添加了 bind app 参数。

    relationship ( * args , ** kwargs )

    一个 sqlalchemy.orm.relationship() ,它应用此扩展的 Query 类,用于动态关系和反向引用。

    在版本 3.0 中更改: Query 类设置在 backref 中。

  • args ( Any ) –

  • kwargs ( Any ) –

  • 返回类型 :

    RelationshipProperty [ Any ]

    session

    一个 sqlalchemy.orm.scoping.scoped_session ,用于创建 Session 的实例,该实例的作用域限定为当前 Flask 应用程序上下文。当应用程序上下文退出时,将移除会话,并将引擎连接返回到池中。

    通过将 session_options 传递给扩展来对其进行自定义。

    这需要激活 Flask 应用程序上下文。

    在版本 3.0 中更改: 会话的作用域限定为当前应用程序上下文。

    class flask_sqlalchemy.model. Model

    声明模型类 SQLAlchemy.Model 的基类。

    要定义模型,请将 db.Model 子类化,而不是这个。要自定义 db.Model ,请将其子类化并将其作为 model_class 传递给 SQLAlchemy 。要在元类级别自定义 db.Model ,请将已创建的声明模型类作为 model_class 传递。

    __bind_key__

    使用此绑定键来选择要与此模型的表关联的元数据和引擎。如果设置了 metadata __table__ ,则忽略此设置。如果没有给出,则使用默认键 None

    query : t.ClassVar [ Query ]

    模型的 SQLAlchemy 查询。等效于 db.session.query(Model) 。可以通过覆盖 query_class 来针对每个模型进行自定义。

    查询界面在 SQLAlchemy 中被认为是过时的。最好使用 session.execute(select())

    元类 mixin(SQLAlchemy 1.x)

    如果你的代码使用 SQLAlchemy 1.x API(未指定 model_class 的代码的默认值),则这些 mixin 将自动应用于 Model 类。

    flask_sqlalchemy.model. DefaultMeta ( 名称 , 基础 , d , ** kwargs )

    提供 __bind_key__ __tablename__ 支持的 SQLAlchemy 声明元类。

  • 名称 ( str ) –

  • 基础 ( tuple [ type , ... ] ) –

  • d ( dict [ str , t.Any ] ) –

  • kwargs ( t.Any ) –

  • flask_sqlalchemy.model. BindMetaMixin ( 名称 , 基础 , d , ** kwargs )

    基于其 __bind_key__ 设置模型的 metadata 的元类 mixin。

    如果模型直接设置 metadata __table__ ,则忽略 __bind_key__ 。如果 metadata 与父模型相同,则不会直接在子模型上设置它。

  • 名称 ( str ) –

  • 基础 ( tuple [ type , ... ] ) –

  • d ( dict [ str , t.Any ] ) –

  • kwargs ( t.Any ) –

  • flask_sqlalchemy.model. NameMetaMixin ( 名称 , 基础 , d , ** kwargs )

    通过将 CamelCase 类名转换为 snake_case 来设置模型的 __tablename__ 的元类 mixin。为未定义 __tablename__ 的非抽象模型设置名称。如果模型未定义主键,则它不会生成名称或 __table__ ,用于单表继承。

  • 名称 ( str ) –

  • 基础 ( tuple [ type , ... ] ) –

  • d ( dict [ str , t.Any ] ) –

  • kwargs ( t.Any ) –

  • flask_sqlalchemy.session. 会话 ( db , ** kwargs )

    SQLAlchemy 会话 类,根据与要查询的事物关联的元数据关联的绑定键选择要使用的引擎。

    要自定义 db.session ,请对其进行子类化,并将其作为 class_ 键传递给 SQLAlchemy 中的 session_options

    3.0 版中已更改: 已从 SignallingSession 重命名。

  • db ( SQLAlchemy ) –

  • kwargs ( t.Any ) –

  • get_bind ( mapper = , clause = , bind = , ** kwargs )

    根据要查询的模型或表的元数据关联的 bind_key 选择一个引擎。如果未设置绑定键,则使用默认绑定。

    3.0.3 版中已更改: 修复了为联接继承模型查找绑定的问题。

    版本 3.0 中更改: 实现更接近于基本 SQLAlchemy 实现。

    版本 2.1 中更改: 支持加入外部事务。

  • mapper ( Any | None ) –

  • clause ( Any | None ) –

  • bind ( Engine | Connection | None ) –

  • kwargs ( Any ) –

  • 返回类型 :

    Engine | Connection

    class flask_sqlalchemy.pagination. Pagination

    查询中所有项的切片,通过基于当前页和每页项数应用偏移量和限制获得。

    不要手动创建分页对象。它们由 SQLAlchemy.paginate() Query.paginate() 创建。

    版本 3.0 中更改: 迭代分页对象会迭代其项。

    版本 3.0 中更改: 手动创建实例不是公开 API。

    page : int

    error_out ( bool ) – 如果没有返回任何项目且 page 不为 1,或者如果 page per_page 小于 1,或者如果它们都不是整数,则中止并显示 404 Not Found 错误。

    返回类型 :

    error_out ( bool ) – 如果没有返回任何项目且 page 不为 1,或者如果 page per_page 小于 1,或者如果它们都不是整数,则中止并显示 404 Not Found 错误。

    返回类型 :
    iter_pages ( * , left_edge = 2 , left_current = 2 , right_current = 4 , right_edge = 2 )

    为分页小部件生成页码。边缘和中间之间的跳过页由 None 表示。

    例如,如果有 20 页,当前页为 7,则生成以下值。

    1, 2, None, 5, 6, 7, 8, 9, 10, 11, None, 19, 20
    
  • left_edge (int) – 从第一页开始显示多少页。

  • left_current (int) – 在当前页左侧显示多少页。

  • right_current (int) – 在当前页右侧显示多少页。

  • right_edge (int) – 从最后一页开始显示多少页。

  • 返回类型:

    Iterator[int | None]

    3.0 版中已更改: 提高了计算生成内容的效率。

    3.0 版中更改:right_current 边界包含在内。

    3.0 版中更改:所有参数都是关键字专用。

    class flask_sqlalchemy.query.Query(entities, session=None)

    SQLAlchemy Query 子类,其中包含一些在 Web 应用程序中进行查询时有用的额外方法。

    这是 Model.query 的默认查询类。

    3.0 版中更改:BaseQuery 重命名为 Query

  • entities (Union[_ColumnsClauseArgument[Any], Sequence[_ColumnsClauseArgument[Any]]]) –

  • session (Optional[Session]) –

  • first_or_404(description=None)

    类似于 first(),但会中止并显示 404 Not Found 错误,而不是返回 None

    description (str | None) – 在错误页面上显示的自定义消息。

    返回类型:
    get_or_404(ident, description=None)

    类似于 get(),但会中止并显示 404 Not Found 错误,而不是返回 None

  • ident (Any) – 要查询的主键。

  • description (str | None) – 在错误页面上显示的自定义消息。

  • 返回类型:
    one_or_404(description=None)

    类似于 one(),但会中止并显示 404 Not Found 错误,而不是引发 NoResultFoundMultipleResultsFound

    description (str | None) – 在错误页面上显示的自定义消息。

    返回类型:

    版本 3.0 中的新增内容。

    paginate(*, page=None, per_page=None, max_per_page=None, error_out=True, count=True)

    根据当前页和每页的项目数应用偏移量和限制,返回一个 Pagination 对象。

  • page (int | None) – 当前页,用于计算偏移。在请求期间默认为 page 查询参数,否则为 1。

  • per_page (int | None) – 一页上的最大项目数,用于计算偏移和限制。在请求期间默认为 per_page 查询参数,否则为 20。

  • max_per_page (int | None) – per_page 的最大允许值,用于限制用户提供的值。对于没有限制,使用 None。默认为 100。

  • error_out (bool) – 如果没有返回任何项目且page不为 1,或者如果pageper_page小于 1,或者如果它们都不是整数,则中止并显示404 Not Found错误。

  • count (bool) – 通过发出额外的计数查询来计算值的总数。对于非常复杂的查询,这可能不准确或速度较慢,因此可以禁用它并在必要时手动设置。

  • 返回类型:

    3.0 版中更改:所有参数都是关键字专用。

    在版本 3.0 中已更改: count查询更高效。

    3.0 版中已更改: max_per_page 默认为 100。

    flask_sqlalchemy.record_queries.get_recorded_queries()

    获取当前会话的已记录查询信息列表。如果启用了配置 SQLALCHEMY_RECORD_QUERIES,则记录查询。

    每个查询信息对象具有以下属性

    statement

    SQLAlchemy 生成的 SQL 字符串,其中包含参数占位符。

    parameters

    随 SQL 语句一起发送的参数。

    start_time / end_time

    有关查询何时开始执行以及何时返回结果的时间信息。准确性和值取决于操作系统。

    duration

    查询花费的时间(以秒为单位)。

    location

    有关查询在应用程序代码中何处执行的字符串描述。这可能无法计算,并且格式不稳定。

    3.0 版中已更改: 已从 get_debug_queries 重命名。

    3.0 版中已更改: 信息对象是一个数据类,而不是元组。

    3.0 版中已更改: 信息对象属性 context 已重命名为 location

    3.0 版中已更改: 不会在调试或测试模式下自动启用。

    返回类型:

    list[_QueryInfo]

    flask_sqlalchemy.track_modifications.models_committed

    如果会话中有更改的模型,则在会话提交后发送此 Blinker 信号。

    发送方是发出更改的应用程序。接收方会收到 changes 参数,其中包含形式为 (instance, operation) 的元组列表。操作包括 "insert""update""delete"