• Flask 学习12.FlaskSQLAlchemy 连接 mysql 数据库 上海


    前言

    SQLAlchemy采用简单的Python语言,提供高效和高性能的数据库访问,实现了完整的企业级持久模型。SQLAlchemy 是目前python中最强大的 ORM框架, 功能全面。
    Flask-SQLAlchemy 是一个为 Flask 应用插件,封装了SQLAlchemy,简化了操作,只需添加配置项就可以在Flask 项目中使用。
    Flask-SQLAlchemy 中文文档http://www.pythondoc.com/flask-sqlalchemy/index.html
    Flask-SQLAlchemy 英文文档https://flask-sqlalchemy.palletsprojects.com/en/2.x/

    Flask-SQLAlchemy 环境准备

    Flask 使用版本v2.x

    先安装连接 mysql 驱动包 pymysql

    pip install pymysql
    

    安装Flask-SQLAlchemy 应用插件

    pip install flask-sqlalchemy
    

    相关版本

    初始化配置

    sqlalchemy 连接数据库,需要使用到一些配置信息,组合成满足以下条件的字符串:

    dialect+driver://username:password@host:port/database
    

    相关配置参数说明

    配置参数 说明
    dialect 数据库,如:sqlite、mysql、oracle等
    driver 数据库驱动,如前面安装的:pymysql
    username 登录数据库用户名
    password 登录数据库密码
    host 数据库部署 IP 地址
    port 端口
    database 数据库库名

    拼接地址示例

    # 拼接配置dialect + driver://username:passwor@host:port/database
    DB_URI = 'mysql+pymysql://root:123456@localhost:3306/web'
    

    flask-sqlalchemy 的相关配置封装到了 flask 的配置项中, 可以通过app.config属性 或 配置加载方案 (如config.from_object) 进行设置

    配置选项 说明
    SQLALCHEMY_DATABASE_URI 连接数据库。示例:mysql://username:password@host/post/db?charset=utf-8
    SQLALCHEMY_BINDS 一个将会绑定多种数据库的字典。
    SQLALCHEMY_ECHO 记录打印SQL语句用于调试的, 一般设置为False, 不然会在控制台输出一大堆的东西
    SQLALCHEMY_POOL_SIZE 数据库池的大小,默认值为5。
    SQLALCHEMY_POOL_TIMEOUT 连接超时时间
    SQLALCHEMY_POOL_RECYCLE 自动回收连接的秒数。
    SQLALCHEMY_MAX_OVERFLOW 控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。
    SQLALCHEMY_TRACK_MODIFICATIONS 如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

    使用示例

    添加配置

    from flask import Flask, url_for, request, redirect, render_template
    
    app = Flask(__name__)
    # 设置数据库连接地址
    DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
    # 是否追踪数据库修改,一般不开启, 会影响性能
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 是否显示底层执行的SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    

    初始化对象,关联到flask 项目, 有两种方式

    方法一:直接在初始化的时候传app参数

    # 初始化组件对象, 直接关联Flask应用
    db = SQLAlchemy(app)
    

    方法二:使用db.init_app(app)方法

    # 先实例化,后关联app
    db = SQLAlchemy()
    # 初始化db,关联flask 项目
    db.app = app    # 这一步需先设置属性,很多老的教程都缺少这一步,导致连不上数据库
    db.init_app(app)
    

    查询示例,可以直接执行原生SQL语句,主要是检查下有没正确链接数据库,查询到结果

    # 执行原生SQL语句, 测试下能不能查询到结果
    sql = 'select * from parent'
    result = db.session.execute(sql)
    print(result.fetchall())
    

    查询结果

    [(1, 'yy', 'yoyo'), (2, 'yy', 'yoyo'), (3, 'yy', 'yoyo')...]
     * Serving Flask app 'app.py'
     * Debug mode: on
    

    完整代码

    from flask import Flask, url_for, request, redirect, render_template
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    # 设置数据库连接地址
    DB_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/web'
    app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI
    # 是否追踪数据库修改,一般不开启, 会影响性能
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    # 是否显示底层执行的SQL语句
    app.config['SQLALCHEMY_ECHO'] = True
    
    # 初始化db,关联flask 项目
    db = SQLAlchemy(app)
    
    
    # 执行原生SQL语句, 测试下能不能查询到结果
    sql = 'select * from parent'
    result = db.session.execute(sql)
    print(result.fetchall())
    
    if __name__ == '__main__':
        app.run()
    
  • 相关阅读:
    Socket基本介绍和实际应用
    自定义流水布局(UICollectionViewFlowLayout的基本使用)
    UIMenuController 简单示例 (Swift)
    继续坚持
    获取手机信息(UIDevice、NSBundle、NSLocale)
    iOS 远程推送 根据后台推送内容的不同跳转指定页面
    定制多样式二维码
    二维码扫描和应用跳转
    iOS开发网络篇—Socket编程
    iOS开发中常用英语单词和句子整理(持续更新)
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/16615745.html
Copyright © 2020-2023  润新知