Flask应用程序中多个models.py的结构

3 投票
1 回答
1024 浏览
提问于 2025-04-17 17:04

我现在有一个Flask应用,结构如下:

deploy/
api/
  customer/
    models.py
  contact/
    models.py
  campaign/
    models.py
  activity/
    models.py
  __init__.py
  database.py
tests/
  test_api.py

因为我有很多模型,所以我把它们分成了不同的文件,这导致我在初始化数据库时遇到了一些问题。

在我的每个模型里,我都这样做,以便让Flask-SQLAlchemy的Model调用可用:

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

class User(db.Model):
...

这样做的结果是,每个模型都有一个不同的db对象,这让我的应用无法正确初始化。

我该如何组织我的项目,才能让所有模型、测试和__init__.py中的create_app()函数都使用同一个db对象呢?

1 个回答

4

这里有一种方法:

  myapp/
    __init__.py
    database.py
    app.py
    model1/
      __init__.py
      models.py
    model2/
      __init__.py
      models.py

在database.py文件中:

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()

在不同的models.py文件中:

from ..database import db

class User(db.Model):
    ...

这使用了显式相对导入的方式。

撰写回答