鍍金池/ 問答/Python  數(shù)據(jù)庫/ mysql+flask _sqlalchemy報錯

mysql+flask _sqlalchemy報錯

跟著書本FlaskWeb開發(fā)學(xué)到第七章調(diào)整項目結(jié)構(gòu)的時候,使用flask_sqlalchemy 出現(xiàn)UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set 的警告
這是config.py代碼

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
app = Flask(__name__)

basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    app.config['SECRET_KEY'] = 'hard to guess string'
    app.config['MAIL_DEFAULT_SENDER'] = '123@qq.com'  # 填郵箱,默認(rèn)發(fā)送者
    app.config['SECRET_KEY'] = 'hard to guess string'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True


    app.config['FLASKY_ADMIN'] = '123@123.cn'

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    DEBUG = True
    app.config['MAIL_SERVER'] = 'smtp.qq.com'
    app.config['MAIL_PORT'] = 587
    app.config['MAIL_USE_TLS'] = True
    app.config['MAIL_USERNAME'] = '123@qq.com'
    app.config['MAIL_PASSWORD'] = 'ddjogvrpawyebcdi'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True


class TestingConfig(Config):
    TESTING = True
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'


class ProductionConfig(Config):
    app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'


config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig

}

這是app__init__.py代碼

from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from config import config
from flask_login import LoginManager

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
login_manager=LoginManager()
login_manager.session_protection='strong'
login_manager.login_view='auth.login'


def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)
    login_manager.init_app(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint,url_prefix='/auth')

# 附加路由和自定義的錯誤頁面

    return app

這是test文件

import unittest
from flask import current_app
from app import create_app, db


class BasicsTestCase(unittest.TestCase):
    def setUp(self):
        self.app = create_app('testing')
        self.app_context = self.app.app_context()
        self.app_context.push()
        db.create_all()
    def tearDown(self):
        db.session.remove()
        db.drop_all()
        self.app_context.pop()

    def test_app_exists(self):
        self.assertFalse(current_app is None)

    def test_app_is_testing(self):
        self.assertTrue(current_app.config['TESTING'])

運(yùn)行python manage.py test的時候報錯信息如下:
C:UsersDELLPycharmProjectsbookvenvlibsite-packagesflask_sqlalchemy__init__.py:774: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
test_app_exists (test_basic.BasicsTestCase) ... C:UsersDELLPycharmProjectsbookvenvlibsite-packagesflask_sqlalchemy__init__.py:774: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
'Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. '
目前把網(wǎng)上有類似問題的解決方案都嘗試過了,還是沒有解決,真的不知道問題出在哪,有人幫忙看一下嗎?

回答
編輯回答
毀了心

我將congfig文件中的app.config['xxx']修改成['xxx']='xxx'的格式就不會出現(xiàn)這個提醒了,例如將
app.config['SECRET_KEY'] = 'hard to guess string'修改為 SECRET_KEY = 'hard to guess string'
不知道原因,但是確實這樣操作后就沒有警告了

2018年6月13日 01:27
編輯回答
念初

Config 類里的 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'去掉。

2017年1月28日 12:15