Flask-如何在单独的文件中导入db = SQLAlchemy

时间:2019-07-07 11:39:16

标签: python flask sqlalchemy

我想通过调用db添加新表或添加数据,但是在尝试导入db时遇到了一些问题

db这样的返回<SQLAlchemy engine=None>

这意味着我还没有做db.init_app(app)

这是我的档案文件

Root
run.py
------>server/__init__.py

Config.py

import os


class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY')
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@localhost/flask_py'
    MAIL_SERVER = 'smtp.googlemail.com'
    MAIL_PORT = 587
    MAIL_USE_TLS = True
    MAIL_USERNAME = os.environ.get('EMAIL_USER')
    MAIL_PASSWORD = os.environ.get('EMAIL_PASS')

Run.py

from server import server_app, db
app = server_app()
if __name__ == '__main__':
    app.run(debug=True)

__ init __。py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from server.config import Config

db = SQLAlchemy()


    def server_app(config_class=Config):
        app = Flask(__name__)
        app.config.from_object(Config)
        db.init_app(app)
        from server.users.routes import users
        app.register_blueprint(users)
        return app

在使用Windows的命令行中,我想导入数据库,我尝试这样:

D:\PYTHON\root>python
from run import db
db.create_all() 

但是当我检查是:

<SQLAlchemy engine=None>

1 个答案:

答案 0 :(得分:1)

在这里,我有一个完整的工作解决方案,与您的工作非常相似。检查我的布局,然后查看create_db.py。

https://github.com/researcher2/stackoverflow_56885380

在您的情况下,似乎没有在交互式shell中执行“ server_app”。假设您正在根目录中运行交互式Shell,则需要执行以下操作:

from server import db, create_app

app = server_app()    
with app.app_context():
    db.create_all()

关于flask-sqlalchemy而不是普通sqlalchemy的恼人之处在于,数据库已耦合到flask应用程序。 db配置来自flask配置,如果要为单个应用程序设置使用更简单的版本,则初始化是在db_init或SqlAlchemy(db)期间完成的。

您的模型还需要正确设置。在上面的示例中,我只是将它们包含在create_db脚本中。

这篇文章可能对工厂和蓝图也有帮助。我创建了上面的github来回答它。

Reflecting different databases in Flask factory setup