Flask擁有豐富的擴展組件,數據庫管理方面Flask-SQLAlchemy簡化了數據庫管理的操作。SQLAlchemy是一個很強大的關系型數據庫框架,支持多種數據庫后台。其不但提供了高層ORM,而且也提供了使用數據庫原生SQL的底層功能。和其他大多數擴展一樣,Flask-SQLAlchemy也使用pip安裝:
pip install flask-sqlalchemy
在Flask中連接MySQL時出現ModuleNotFoundError: No module named 'MySQLdb'錯誤,只要在配置SQLALCHEMY_DATABASE_URI時,加上一個pymysql就可以了:
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:3306/數據庫名?charset=utf8mb4'
,當然,前提是要已經安裝了pymysql,如果沒有裝pymysql,是會報ModuleNotFoundError: No module named 'pymysql'錯誤的,
安裝命令:
pip install pymysql
在利用Flask實現研究課題相關系統時,涉及到數據庫相關操作。由於使用Python3開發語言,python3中已經不再支持MySQLdb模塊,所以這里使用pymysql數據庫連接組件,安裝pymysql:
pip install pymysql
數據庫連接:
from flask_sqlalchemy import SQLAlchemy
配置數據庫連接
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:root@localhost:3306/數據庫名?charset=utf8mb4'
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
當建立model.py文件后,一般需要引入,這個位置很關鍵要放在db創建的下面,db,creat_all()前面。
下面是我的一些初始化配置文件 init.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
# 快速定位文件位置
basedir = os.path.abspath(os.path.dirname(__file__))
# 創建項目對象
app = Flask(__name__)
# SQLALCHEMY_DATABASE_URI:用於連接數據庫
# mysql://username:password@hostname/database?編碼
app.config['SQLALCHEMY_DATABASE_URI'] = \
"mysql+pymysql://root:root@localhost:3306/html_db?charset=utf8mb4"
# 如果設置成True(默認情況),Flask-SQLAlchemy 將會追蹤對象的修改並且發送信號。
# 這需要額外的內存, 如果不必要的可以禁用它。如果你不顯示的調用它,
# 在最新版的運行環境下,會顯示警告。
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config.from_object('html_report.setting') # 模塊下的setting文件名,不用加py后綴
# 環境變量,指向配置文件setting的路徑
FLASKR_SETTINGS = os.path.join(basedir, "setting")
app.config.from_envvar("FLASKR_SETTINGS", silent=True)
db = SQLAlchemy(app)
from html_report.model import user, category
def db_init():
db.create_all()
db_init()
setting.py文件
對於用過Django文件的同學們,應該不陌生,這是一個各種配置信息的文件,可以把所有的配置寫進去,只不過我寫在了init文件中,這個看個人習慣,flask數據庫沒有Django封裝的好,數據庫的定義多樣化。
# 打開調試模式
DEBUG = True
# SQLALCHEMY_TRACK_MODIFICATIONS = False
# # session必須要設置key
SECRET_KEY = 'A0Zr98j/3yX R~XHH!jmN]'
#
# # mysql數據庫連接信息,這里改為自己的賬號
# SQLALCHEMY_DATABASE_URI = "mysql://username:password@ip:port/dbname"
runserver.py 是我的項目啟動文件
from html_report import app
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(debug=True)