当前位置: 首页 > 面试题库 >

在Flask内外使用SQLAlchemy模型

柯振濂
2023-03-14
问题内容

我正在尝试构建可在Flask和其他非Flask服务中使用的SQLAlchemy模型。我知道,为了在Flask中使用这些对象,我可以使用Flask-
SQLAlchemy模块并构建如下模型:

app_builder.py

def create_app(config):

    # Create a Flask app from the passed in settings
    app = Flask('web_service')
    app.config.from_object(config)

    # Attach SQLAlchemy to the application
    from database import db

    db.init_app(app)

database.py

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Job(db.Model):
    __tablename__ = 'job'

    job_id = db.Column(db.Integer, primary_key=True)
    description = db.Column(db.String(256))

    def __init__(self, description):
        self.description = description

但是,这样做似乎将模型与使用flask_sqlalchemy绑定在一起。我还有一个服务,我想在不使用flask的情况下使用这些模型。有没有一种方法可以在非Flask特定上下文中重用这些类定义(也许通过更改db.Model)?


问题答案:

flask_sqlalchemy不允许在Flask上下文之外使用它。但是,您可以通过SQLAlchemy本身创建模型。因此,您的database.py文件将如下所示:

from sqlalchemy import MetaData, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

metadata = MetaData()
Base = declarative_base(metadata=metadata)

class Job(Base):
    __tablename__ = 'job'

    job_id = Column(Integer, primary_key=True)
    description = Column(String(256))

    def __init__(self, description):
        self.description = description

您可以使用产生的元数据(flaskdb.py)初始化Flask sqlalchemy对象:

from flask_sqlalchemy import SQLAlchemy

from database import metadata

db = SQLAlchemy(metadata=metadata)

然后您像这样初始化Flask应用程序:

from flask import Flask

from flaskdb import db

def create_app(config):
    app = Flask('web_service')
    app.config.from_object(config)

    db.init_app(app)

可以通过会话在Flask上下文之外使用创建的模型,例如:

from sqlalchemy import create_engine
from sqlalchemy.orm import Session

from database import metadata, Job

engine = create_engine('your://database@configuration/here')
session = Session(engine)
jobs = session.query(Job).all()
session.close()

作为这种方法的缺点,您不能通过模型​​直接访问数据库对象,而不能使用会话:

from database import Job
from flaskdb import db

Job.query.all() # Does not work
db.session.query(Job).all() # Works


 类似资料:
  • 问题内容: 我已阅读flask-sqlalchemy或sqlalchemy,它们建议将flask-sqlalchemy与flask一起使用。我想遵循这种方法。 但是,我有一个为命令行脚本编写的现有模型,该模型基于sqlalchemy的declarative_base,例如, 我希望仍然可以在此模型中使用命令行脚本,但也希望围绕该模型构建Web应用程序。 有没有办法扩展现有模型,以获得使用flask

  • 很多人更倾向于使用 SQLAlchemy 进行数据库操作。在这种情况下,建议您使用 包的而不是模块的方式组织您的应用代码,并将所有的模型放置到一个单独的模块中 (大型应用)。尽管这并非必要,但是这么做将会让程序的结构更加 明晰。 使用 SQLAlchemy 有四种常用的方法,我们在下面列出了这几种方法的基本使用 框架: Flask-SQLAlchemy 扩展 因为 SQLAlchemy 是一个常用

  • 问题内容: 我是flask和sqlalchemy的新手,我只是开始在flask应用程序上工作,现在我正在使用sqlalchemy。我想知道使用flask-sqlalchemy与sqlalchemy是否可以获得任何显着的好处。 问题答案: 主要功能是与Flask应用程序正确集成-它创建并配置引擎,连接和会话,并将其配置为与Flask应用程序一起使用。 此设置非常复杂,因为我们需要创建作用域会话并根据

  • 在Flask Web应用程序中使用原始SQL对数据库执行CRUD操作可能很乏味。 相反,Python工具包SQLAlchemy是一个功能强大的OR映射器,为应用程序开发人员提供了SQL的全部功能和灵活性。 Flask-SQLAlchemy是Flask扩展,它将对SQLAlchemy的支持添加到Flask应用程序中。 什么是ORM(对象关系映射)? 大多数编程语言平台是面向对象的。 另一方面,RDB

  • Flask-SQLAlchemy Flask-SQLAlchemy is an extension for Flask that adds support forSQLAlchemy to your application. It aims to simplify using SQLAlchemywith Flask by providing useful defaults and extra h

  • 问题内容: 我遇到 了 几种有关如何在Flask-SQLAlchemy中使用香草SQLAlchemy模型的方法。 使用从Flask-SQLAlchemy继承的模型就像一种魅力。 但是我真的很喜欢那种方便的东西… 因此,我开始着手对此进行研究,并编写了一些代码,但是我受困于此,需要一些帮助才能使它变得更加整洁。 以下块是一个通用定义,不能从任何一个继承。它是从Flask-SQLAlchemy和Van