我想通过调用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>
答案 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来回答它。