Web框架——Flask系列之Flask-SQLAlchemy安装与使用 & 定义数据模型(八)
发布日期:2021-05-08 02:34:17 浏览次数:24 分类:原创文章

本文共 2042 字,大约阅读时间需要 6 分钟。

Flask-SQLAlchemy安装及设置

  • SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
  • SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。
  • 文档地址:http://docs.jinkan.org/docs/flask-sqlalchemy

一、安装

安装 flask-sqlalchemy

pip install flask-sqlalchemy

如果连接的是 mysql 数据库,需要安装 mysqldb

pip install flask-mysqldb

提示:如果flask-mysqldb安装不上,安装, pip install pymysql

二、数据库连接设置

  • 设置数据库的链接地址,追踪信息
  • 格式:mysql://<用户名>:<密码>@:<端口>/数据库名称

在这里插入图片描述

# 数据库链接地址app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/test'# 动态追踪修改设置,如未设置只会提示警告app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

查看映射的sql语句,设置: app.config[‘SQLALCHEMY_ECHO’] = True

  • 配置完成需要去 MySQL 中创建项目所使用的数据库
$ mysql -uroot -pmysql$ create database test charset utf8;

三、其他配置信息

在这里插入图片描述

连接其他数据库

完整连接 URI 列表请跳转到 SQLAlchemy 下面的文档 (Supported Databases) 。这里给出一些 常见的连接字符串。

  • Postgres:

postgresql://scott:tiger@localhost/mydatabase

  • MySQL:

mysql://scott:tiger@localhost/mydatabase

  • Oracle:

oracle://scott:tiger@127.0.0.1:1521/sidname

  • SQLite (注意开头的四个斜线):

sqlite:absolute/path/to/foo.db

常用的SQLAlchemy字段类型

在这里插入图片描述

常用的SQLAlchemy列选项

在这里插入图片描述

常用的SQLAlchemy关系选项

在这里插入图片描述

四、代码演示(定义数据模型)

在这里插入图片描述

from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)# 数据库链接地址app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:root@127.0.0.1/flask_sql_demo'# 动态追踪修改设置,如未设置只会提示警告,不建议开启,未来版本中会移除app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = Falsedb = SQLAlchemy(app)'''两张表角色(管理员/普通用户)用户(角色ID)'''# 数据库的模型,需要继承db.Model# 角色表class Role(db.Model):    # 定义表名    __tablename__ = 'roles'    # 定义字段    # db.Column表示是一个字段    id = db.Column(db.Integer,primary_key=True)    name = db.Column(db.String(16),unique=True)# 用户表class User(db.Model):    # 定义表名    __tablename__ = 'users'    # 定义字段    id = db.Column(db.Integer, primary_key=True)    name = db.Column(db.String(16), unique=True)    # db.ForeignKey('roles.id')表示是外键,需要传参数:表名.字段名    role_id = db.Column(db.Integer,db.ForeignKey('roles.id'))@app.route('/')def index():    return 'Hello flask!'if __name__ == '__main__':    app.run(debug=True)
上一篇:洛谷P2516 [HAOI2010]最长公共子序列 动态规划
下一篇:LeetCode 5687.执行乘法运算的最大分数

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月02日 19时49分41秒