Flask SQLAlchemy配置

发布时间 2023-07-03 10:39:58作者: 春游去动物园

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的格式即可
'''