Flask SQLAlchemy配置
Flask模型
Flask默认并没有提供任何数据库操作的API我们可以选择任何适合自己项目的数据库来使用
Flask中可以自己的选择用原生语句实现功能,也可以选择ORM (SQLAlchemy,MongoEngine)
原生sQL缺点
代码利用率低,条件复杂代码谐句越长,有很多相似语句
一些sQL是在业务逻辑中拼出来的,修改需要了解业务逻辑
直接写sQL容易忽视sQL问题
ORM
Flask通过wodel操作数据库,不管你数据库的类型是Mysql或者sqlite,Flask自动帮你生成相应数据库类型的sQL语句,所以不需要关注sQL语句和类型,对数据的操作Flask帮我们自动完成。只要会写Nodel就可以了。
Flask使用对象关系映射(object Relational Mapping,简称ORM)框架去操控数据库。
ORM(object Relational Mapping)对象关系映射,是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。
将对对象的操作转换为原生sQL
优点
易用性,可以有效减少重复sQL性能损耗少
设计灵活,可以轻松实现复杂查询移植性好
Flask的ORM
Flask使用python自带的ORM: SQLAlchemy
针对于Flask的支持,安装插件flask-sq1aichemy
pip install flask-sqlalchemy
连接SQLite
sQLite连接的URL:
DB_URI = sqlite:///sqlite3.db
连接mysql
USERNAME= ' root'
PASSWORD='root'
HOSTNAME = 'localhost'
PORT='3306'
DATABASE='HelloFlask'
格式: mysql+pymysql://USERNAME:PASSWORD@HOSTNAME:PORT/DATABASE
#配置URL
DB_URI=' mysql+pymysql://{}:{}@{}:{}/{}'.format(
USERNAME,
PASSWORD,
HOSTNAME,
PORT,
DATABASE
)
在Flask中使用ORM
连接数据库需要指定配置
app.config[ 'SQLALCHEMY_DATABASE_URI'] = DB_URI # 配置连接数据库路径DB_URL
app.config[ 'SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 禁止对象追踪修改
SQLite数据库连接不需要额外驱动,也不需要用户名和密码
#在Flask项目中使用
db = SQLAlchemy()
db.init_app(app)
需要安装的包
#安装flask-sqlalchemy(用于ORM)
pip install flask-sqlalchemy -i https://pypi.douban.com/simple
#安装flask-migrate(用于数据迁移)
pip install flask-migrate -i https://pypi.douban.com/simple
#安装pymysql (MySQL驱动)
pip install pymysql -i https://pypi.douban.com/simple
案例以sqlite为例连接数据库
1.首先项目目录已经提前整理
在App中创建一个exts.py文件 ------ 用于管理插件
2.安装上面的3个包
3.flask中配置数据库
在App.__init__.py 中
from flask import Flask
from App.views import blueprints1
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blueprints1)
# 配置数据库 sqlite
db_uri = 'sqlite:///sqlite3.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 禁止对象追踪修改
return app
4.导入第三方插件,初始化,以及和app绑定
在App.exts.py 中管理我们的插件
exts.py:
# exts.py: 插件管理
# 扩展的第三方插件
# 1.导入第三方插件
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
# 2. 初始化
db = SQLAlchemy() # ORM
migrate = Migrate() # 数据迁移
# 3. 和app绑定
def init_exts(app):
db.init_app(app=app)
migrate.init_app(app=app, db=db) # 必须传2个参数
'''
该文件主要用来管理插件,
在第一部分导入我们的第三方插件,
在第二部分初始化插件
在第三部分和flask app进行绑定
绑定的步骤我们通过一个函数来实现,只需要给函数传入flask app即可,使用时只需要在 App.__init__.py.create_app 函数中调用 init_exts函数并传入app即可,后面所有的插件都写在这即可。
'''
App.__init__.py:
from flask import Flask
from App.views import blueprints1
from .exts import init_exts
def create_app():
app = Flask(__name__)
# 注册蓝图
app.register_blueprint(blueprint=blueprints1)
# 配置数据库 sqlite
db_uri = 'sqlite://sqlite3.db'
app.config['SQLALCHEMY_DATABASE_URI'] = db_uri
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # 禁止对象追踪修改
# 初始化插件
init_exts(app=app)
return app
'''
如果是mysql的话只需要将App.__init__.py中的db_url改为mysql的格式即可
'''