SQLAlchemyCore可以与Flask SQLAlchemy一起使用吗



是否可以使用标准的sqlAlchemy Core查询,如下面的查询,Flask sqlAlchemi模块实例化如下:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

出于代码重用的目的,我们需要使用这些类型查询,其中db.metadata是我们现有数据库连接的数据库对象,没有Flask sqlAlchemy。我们希望能够像使用SQL Alchemy ORM一样使用这些类型查询,pythin必须像使用Flask sqlAlchemy一样设置模型和控制器。

node = Table('nodes', db.metadata, autoload=True)
qry = node.select().where(node.c.node_id == node_id)
res = qry.execute()
for row in res:
data = dict(row)

https://flask-sqlalchemy.palletsprojects.com/en/2.x/api

此类还提供对SQLAlchemy和SQLAlchemy.orm模块中所有SQLAlchemy函数和类的访问。所以你可以这样声明模型:

class User(db.Model):
username = db.Column(db.String(80), unique=True)
pw_hash = db.Column(db.String(80))

您仍然可以直接使用sqlalchemy和sqlalchemy.orm,但请注意,Flask sqlalchemy自定义只能通过该SQLAlchemi类的实例使用。查询类默认为数据库的BaseQuery。查询,数据库。Model.query_class,以及db.relationship和db.backref的默认query_class.如果您直接通过sqlalchemy.orm和sqlalchem.morm使用这些接口,那么默认的查询类将是sqlalchem的查询类。

因此,我建议使用Flask SQLAlchemy类,因为它们是基本SQLAlchemi对象的薄包装,并添加了一些内容,使其与Flask应用程序更无缝地工作。然而,正如文档中所述,这并不能阻止您深入到SQLAlchemy类。

我确实有一个Flask应用程序,我们没有使用Flask SQLAlchemy,只是让Flask应用程序调用一个数据库接口,我们使用了纯SQLAlchemy。不利的一面是,您必须做一些工作,使其与Flask的应用程序上下文和生命周期协同工作。如果你想将数据库层与Flask层解耦,这可能就是你想要的。

最新更新