SQLALCHEMY_DATABASE_URI 未设置

新手上路,请多包涵

I tried to work with CURD operation using Flask and SQLAlchemy getting Error while connecting to database.

这是 Error 日志。

 /usr/local/lib/python3.4/dist-packages/flask_sqlalchemy/__init__.py:819: UserWarning: SQLALCHEMY_DATABASE_URI not set. Defaulting to "sqlite:///:memory:".
  'SQLALCHEMY_DATABASE_URI not set. Defaulting to '
/usr/local/lib/python3.4/dist-packages/flask_sqlalchemy/__init__.py:839: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future.  Set it to True or False to suppress this warning.
  'SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and '

这是我的 代码和设置

# database.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
sqldb = SQLAlchemy(app)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:root@localhost/myDbName"

# create app
def create_app():
    sqlDB = SQLAlchemy(app)
    sqlDB.init_app(app)
    sqlDB.create_all()
    return app

这是模型.py

 from ..database import create_app
sqldb = create_app()
#  Users Model
class Users(sqldb.Model):
    __tablename__ = 'users'
    id = sqldb.Column(sqldb.Integer, primary_key = True)
    db = sqldb.Column(sqldb.String(40))
    def __init__(self,email,db):
        self.email = email
        self.db = db
    def __repr__(self,db):
        return '<USER %r>' % self.db

这是 routes.py

 # Import __init__ file
from __init__ import app
import sys
# JSON
from bson import dumps
# login
@app.route('/', methods = ['GET'])
def login():
    try:
        # import users model
        from Model.models import Users,sqldb
        sqldb.init_app(app)
        sqldb.create_all()
        getUser = Users.query.all()
        print(getUser)
        return 'dsf'
    except Exception as e:
        print(e)
        return "error."

原文由 Kaushik Makwana 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 634
2 个回答

您可能需要将此行 app.config['SQLALCHEMY_DATABASE_URI'] = "mysql..." 放在 SQLAlchemy(app) 实例化之前。

另一种选择是创建 SQLAlchemy() 没有参数,配置 URI,最后告诉 SQLAlchemy 通过 sqldb.init_app(app) 链接到您的应用程序

请注意,这是您在 create_app 函数中所做的,但您从未使用过它?

原文由 B. Barbieri 发布,翻译遵循 CC BY-SA 3.0 许可协议

像上面的答案,如果你这样使用它,改变

sqldb = SQLAlchemy(app)

sqldb = SQLAlchemy()

原文由 huangke 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进