项目目录结构参见 学习1
接下来开始连接mysql数据库的相关配置。
1、在 config.py
文件中增加数据库连接字符串
以下是示例:
import os
basedir = os.path.abspath(os.path.dirname(__file__))
class Config:
SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
SQLALCHEMY_COMMIT_ON_TEARDOWN = True
FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
FLASKY_MAIL_SENDER = 'Flasky Admin <[email protected]>'
FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
MAIL_SERVER = 'smtp.googlemail.com'
MAIL_PORT = 587
MAIL_USE_TLS = True
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
'sqlite:///' + os.path.join(basedir, 'data.sqlite')
config = {
'development': DevelopmentConfig,
'testing': TestingConfig,
'production': ProductionConfig,
'default': DevelopmentConfig
}
配置类可以定义init_app() 类方法,其参数是程序实例。在这个方法中,可以执行对当前
环境的配置初始化。现在,基类Config 中的init_app() 方法为空。
2、在 app/__init__.py 文件中增加相关配置:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy //新增加的内容
from config import config //新增加的内容
db = SQLAlchemy() //新增加的内容
def create_app():
from .main import main as main_blueprint
app = Flask(__name__)
app.config.from_object(config['development']) //新增加的内容
config['development'].init_app(app) //新增加的内容
app.register_blueprint(main_blueprint)
db.init_app(app) //新增加的内容
return app
备注1:flask中连接MySQL出现ModuleNotFoundError: No module named 'MySQLdb’错误
解决方法:先安装pymysql:pip install pymysql
,然后在配置SQLALCHEMY_DATABASE_URI时,加上一个pymysql就可以了:
app.config[‘SQLALCHEMY_DATABASE_URI’] = ‘mysql+pymysql://root:dzd123@localhost/你的数据库名’
更新:
使用pymysql驱动,执行查询语句的时候,报出Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 481")
的错误,查询数据库编码是utf8没有问题。根据有些资料提示将pymysql换成了mysql官方驱动程序 mysql-connector-python,执行命令pip install mysql-connector-python
安装,然后在配置SQLALCHEMY_DATABASE_URI
的时候,将之前的mysql+pymysql
改成mysql+mysqlconnector
即可。
顺便将mysql的utf8字符集改成了utf8mb4