跟着书本FlaskWeb开发学到第七章调整项目结构的时候,使用flask_sqlalchemy 出现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' # 填邮箱,默认发送者
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'])
运行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. '
目前把网上有类似问题的解决方案都尝试过了,还是没有解决,真的不知道问题出在哪,有人帮忙看一下吗?
把
Config
类里的app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:430202@127.0.0.1:3306/test1'
去掉。