1. 程式人生 > >Flask 學習2 連線資料庫

Flask 學習2 連線資料庫

專案目錄結構參見 學習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:[email protected]/你的資料庫名’
更新:
使用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