python - SQLAlchemy 中需要多少个 Base 或 MetaData 实例?

标签 python flask sqlalchemy

我目前正在阅读有关在 Flask 中使用 SQLAlchemy 的文档,我不清楚的一件事是某些 SQLAlchemy 对象(例如 BaseMetaData)我需要吗?

例如,此处的 ORM 文档 ( http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html ) 显示了以下示例:

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

Base = declarative_base()

class User(Base):
    ...
    ...

那么现在,我需要每个 ORM 类的 Base 实例吗?或者我可以在某处声明 Base 的单个实例(例如在 __init__.py 中)并重新使用它吗?如果我可以声明一个实例并重复使用它,那么从初始化的角度来看它是线程安全的还是我需要确保部分或全部与 ORM 相关的初始化在启动时发生一次?

同样,MetaData 的情况也类似:

from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey

metadata = MetaData()
users = Table('users', metadata,
    Column('id', Integer, primary_key=True)
    Column('name', String),
    Column('fullname', String))

现在,如果我要在用户下方声明一个地址Table(如文档中的示例所示),我可以看到这可能会很好,因为执行会按顺序发生。但是如果我将地址放在另一个模块中怎么办?然后我是否需要为该模块创建一个新的 MetaData 实例,或者我可以再次在 __init.py__ 中声明一个实例并重新使用它吗?

我发现自己一遍又一遍地问这个问题。我还想弄清楚拥有多个 BaseMetaData 对象是否有问题?

我对大规模 Python 开发还比较陌生(我已经在其中完成了很多单线程脚本编写),所以也许我对作用域和线程的理解有些缺乏?

最佳答案

在 Flask 项目中您只需要一个 Base 实例。如果您使用flask-sqlalchemy,那么您可以直接使用SQLAlchemy实例中的模型:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
db = SQLAlchemy(app)

class User(db.Model):
    pass

使用 Flask-SQLAlchemy,您将可以使用分页和一些有用的方法,例如 get_or_404,这将节省您以后的时间。

关于python - SQLAlchemy 中需要多少个 Base 或 MetaData 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25666318/

相关文章:

python - 将元组转换为两部分

python - 以一对多关系选择和排序记录

python - SQLAlchemy 模型数据未在 Jinja 循环中呈现

python - 使用 Colanderalchemy 进行 Cornice 模式验证

python - Django:manage.py loaddata 返回 'Deserialization Error'

python - psycopg 中的 `cursor` 类有什么意义?

python - 从 Heroku 下载 sqlite 数据库

python - AWS Elastic Beanstalk 错误 - ImportError : No module named flask. ext.sqlalchemy

python - 不可哈希类型 : 'dict' in Flask app

javascript - Flask:为什么定义变量时ajax数据的内容会改变?