【问题标题】:Separate SQLAlchemy models by file in Flask [duplicate]在Flask中按文件分离SQLAlchemy模型[重复]
【发布时间】:2013-01-25 05:28:35
【问题描述】:

我见过的许多 Flask 应用示例都将模型直接存储在主应用文件中(http://pythonhosted.org/Flask-SQLAlchemy/quickstart.htmlhttp://maximebf.com/blog/2012/10/building-websites-in-python-with-flask/)。其他的 (http://flask.pocoo.org/docs/patterns/sqlalchemy/) 有一个“models.py”文件,其中放置了模型。

如何让我的 Flask 应用程序从单独的文件导入模型,例如“用户.py”?当我尝试使用以下内容创建 User.py 文件时:

from app import db

class User(db.Model):
    [...]

我收到以下错误:

File "/Users/stackoverflow/myapp/models/User.py", line 1, in <module>
from app import db
ImportError: No module named app

当我在我的模块文件中插入from models import User

【问题讨论】:

  • 但是db 是在哪里定义的?如果您在database.py 中创建db,那么您需要from .database import db,而不是来自app
  • db 在我的主要app.py 文件中定义:db = SQLAlchemy(app)
  • 我不知道在哪里定义它,因为“app”变量不会在任何其他文件的范围内。
  • 但是如果 app 是从 User 导入的,那么你现在有一个循环导入,这是行不通的。将db 移出到单独的模块;您链接到的 Flask 模式文档有一个单独的 database.py 模块。
  • 你确实不需要需要导入app;只需创建一个具有相同名称的 Flask() 的新实例。在任何地方使用Flask('yourapplication'),请参阅flask.pocoo.org/docs/api/#application-object。这是一个循环导入损坏。

标签: python sqlalchemy flask flask-sqlalchemy


【解决方案1】:

这个答案非常有帮助:https://stackoverflow.com/a/9695045/353878

我不需要立即初始化数据库。

【讨论】:

  • “不立即初始化数据库”是什么意思?
  • @johnny 表示SQLAlchemy()在使用的模块中不必将app作为参数。在大多数示例中,您可以看到SQLAlchemy(app),但在这种情况下它需要来自其他范围的app。相反,您可以使用未初始化的SQLAlchemy() 并稍后使用init_app(app) 方法,如http://stackoverflow.com/a/9695045/2040487 中所述。
【解决方案2】:
from app.database import Base

class User(Base):
__tablename__ = 'users'

应该这样吗??

【讨论】:

  • 这看起来像 SqlAlchemy,而不是像请求的操作那样的 Flask-SqlAlchemy。
猜你喜欢
  • 2017-01-07
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多