【问题标题】:SQLALCHEMY_DATABASE_URI not setSQLALCHEMY_DATABASE_URI 未设置
【发布时间】:2017-09-13 23:35:36
【问题描述】:

我尝试使用FlaskSQLAlchemy 处理CURD 操作。但是在连接到数据库时得到Error

这是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

这里是models.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." 

【问题讨论】:

    标签: python-3.x flask sqlalchemy flask-sqlalchemy


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢@B。 Barbieri :) 现在错误消失了,但出现了新错误。 sqlalchemy 扩展未注册到当前应用程序。请务必先调用 init_app()。
    • 这不是很清楚这是从哪里来的,主要是因为你的导入非常混乱......你可能需要删除这个 create_app 函数,并从 database.py 进行所有导入:这将阻止您在完全配置之前尝试使用 sqldb
    【解决方案2】:

    和上面的答案一样,如果你这样用的话,改一下

    sqldb = SQLAlchemy(app)
    

    sqldb = SQLAlchemy()
    

    【讨论】:

      【解决方案3】:

      同样的错误,设置FLASK_APP环境变量后就消失了:

      export FLASK_APP=run.py
      

      启动应用程序:

      flask run --host=0.0.0.0 --port=5000
      

      【讨论】:

        【解决方案4】:

        当未设置app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] 时会发生此类错误。您可以将其设置为TrueFalse,如下所示:

        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
        

        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
        

        【讨论】:

          猜你喜欢
          • 2020-10-15
          • 1970-01-01
          • 1970-01-01
          • 2019-10-07
          • 2022-10-24
          • 2021-02-26
          • 2016-07-31
          • 1970-01-01
          • 2022-12-09
          相关资源
          最近更新 更多