Python编程:Flask数据库扩展Flask-SQLAlchemy

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Python编程:Flask数据库扩展Flask-SQLAlchemy

安装

pip install flask-sqlalchemy
pip install flask-mysqldb

flask-sqlalchemy


模型类 -> sql
数据库结果 -> 模型类

数据库驱动


# python3
pip install pymysql 
pymysql.install_as_MySQLdb()
# python2
pip install MySQL-Python

数据库设置

# 1、数据库连接
app.config["SQLALCHEMY_DATABASE_URI"] = "msyql://root:123456@127.0.0.1:3306/db_name"
# 2、自动提交(不推荐)
app.config["SQLALCHEMY_COMMIT_ON_TEARDOWN"] = True
# 3、修改自动跟踪
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
# 4、显示原始SQL
app.config["SQLALCHEMY_ECHO"] = True

代码示例

# -*- coding: utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# 配置参数
class Config(object):
    SQLALCHEMY_DATABASE_URI = "mysql://root:123456@127.0.0.1:3306/demo"
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    # SQLALCHEMY_ECHO = True
app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
# 创建数据库模型类
class Role(db.Model):
    """用户角色"""
    __tablename__ = "tbl_roles"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32), unique=True)
    users = db.relationship("User", backref="role")
    def __repr__(self):
        return "<Role name: {}>".format(self.name)
class User(db.Model):
    """用户表"""
    __tablename__ = "tbl_users"  # 表名
    id = db.Column(db.Integer, primary_key=True)  # 整型主键默认自增
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(128))
    role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id"))
    def __repr__(self):
        return "<User name: {}>".format(self.name)
if __name__ == '__main__':
    # 删除表
    db.drop_all()
    # 创建表
    db.create_all()

创建数据

# 1、创建一条数据
role1 = Role(name="admin")
role2 = Role(name="stuff")
db.session.add(role1)
db.session.add(role2)
db.session.commit()
# 2、 一次保存多个数据
user1 = User(name="张三", email="123@qq.com", password="123456", role_id=role1.id)
user2 = User(name="李四", email="456@qq.com", password="12345x", role_id=role2.id)
user3 = User(name="王五", email="339@qq.com", password="12345y", role_id=role1.id)
user4 = User(name="刘能", email="226@qq.com", password="12345v", role_id=role2.id)
user5 = User(name="赵四", email="778@qq.com", password="12345b", role_id=role1.id)
db.session.add_all([user1, user2, user3, user4, user5])
db.session.commit()

查询数据

# 1、简单查询
rows = Role.query.all()
row = Role.query.first()
row = Role.query.get(<id>)
rows = db.seesion.query(Role).all()
row = db.seesion.query(Role).first()
row = db.seesion.query(Role).get(<id>)
# 2、条件过滤(与关系)
row = Role.query.filter(Role.name="张三", Role.role_id=2).first()
row = Role.query.filter_by(name="张三", role_id=2).first()
# 3、模糊查询(或关系)
from sqlalchemy import or_
row = Role.query.filter(or_(Role.name.startswith("张"), Role.role_id=2)).first()
# 4、分页
rows = Role.query.offset(2).limit(10).all()
# 5、排序
rows = Role.query.order_by("-id").all()
rows = Role.query.order_by(Role.id.desc()).all()
# 6、分组
from sqlalchemy import func
rows = db.session.query(Role.id, func.count(Role.id)).group_by(Role.id)
# 7、外键查询
user = User.query.get(1)
user.role.name
role = Role.query.get(1)
role.users

更新数据

# 1、更新对象
user = User.query.get(1)
user.name = "python"
db.session.add(user)
db.session.commit()
# 2、直接更新数据
User.query.filter_by(name="张三").update({"name": "python"})
db.session.commit()

删除数据

user = User.query.get(1)
db.session.delete(user)
db.session.commit()
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
前端开发 关系型数据库 数据库
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
60 0
|
12天前
|
关系型数据库 分布式数据库 数据库
PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。
【7月更文挑战第3天】PolarDB,阿里云的开源分布式数据库,与微服务相结合,提供灵活扩展和高效管理解决方案。通过数据分片和水平扩展支持微服务弹性,保证高可用性,且兼容MySQL协议,简化集成。示例展示了如何使用Spring Boot配置PolarDB,实现服务动态扩展。PolarDB缓解了微服务数据库挑战,加速了开发部署,为云原生应用奠定基础。
153 3
|
1月前
|
API 数据库 数据库管理
Flask Web开发基础:数据库与ORM实战
该文介绍了如何使用 Flask、SQLAlchemy 和 SQLite 实现数据库操作。首先,通过创建虚拟环境和安装 flask-sqlalchemy(版本2.5.1)及 sqlalchemy(版本1.4.47)来设置环境。接着,配置数据库URI,定义User和Movie模型类表示数据库表,并通过db.create_all()创建表。文章还展示了如何插入、查询、更新和删除记录,强调了db.session.commit()在保存更改中的关键作用。查询涉及filter、order_by等方法,提供了一系列示例。
306 1
|
2月前
|
负载均衡 关系型数据库 数据管理
关系型数据库的横向扩展
【5月更文挑战第2天】关系型数据库的横向扩展
46 6
关系型数据库的横向扩展
|
2月前
|
存储 负载均衡 关系型数据库
关系型数据库垂直扩展限制
【5月更文挑战第2天】关系型数据库垂直扩展限制
35 4
关系型数据库垂直扩展限制
|
2月前
|
Python
编写自己的Flask扩展:扩展框架的无限可能
【4月更文挑战第16天】本文介绍了如何编写Flask扩展以增强其功能。Flask扩展用于添加框架未内置的高级特性。一个扩展通常包括初始化函数、上下文处理器、命令行工具、信号处理和辅助函数。文中通过一个简单的自定义日志记录扩展示例,展示了创建扩展的步骤。扩展类`CustomLogger`包含初始化、请求前记录日志和自定义日志函数。通过`init_custom_logger`函数在应用中注册扩展。最后,展示了如何在应用中使用该扩展记录日志。编写Flask扩展可实现复杂逻辑、定制命令和处理事件,从而打造功能丰富的Web应用。
|
2月前
|
JSON 安全 API
Flask-Login与Flask-RESTful:扩展你的应用功能
【4月更文挑战第16天】本文介绍了两个实用的Flask扩展——Flask-Login和Flask-RESTful。Flask-Login提供用户认证和会话管理,简化了登录、注销和保护路由的逻辑。而Flask-RESTful则助力构建RESTful API,支持多种HTTP方法和请求解析。通过这两个扩展,开发者能轻松增强Flask应用的功能性,实现安全的用户认证和高效的API交互。
|
2月前
|
前端开发 API 数据库
Flask扩展大观:增强你的Web开发能力
【4月更文挑战第16天】本文介绍了Flask常用扩展,包括数据库扩展Flask-SQLAlchemy和Flask-Migrate,用户认证与权限管理的Flask-Login和Flask-Principal,表单处理的Flask-WTF,静态文件与模板扩展Flask-Assets和Flask-Bootstrap,以及其他实用扩展如Flask-DebugToolbar和Flask-RESTful。这些扩展帮助开发者更高效地构建功能丰富的Web应用。
|
2月前
|
安全 数据库连接 数据库
Flask数据库操作实战:增删改查一网打尽
【4月更文挑战第15天】本文介绍了在Flask中进行数据库操作的方法,包括选择数据库扩展(如Flask-SQLAlchemy)、配置数据库、定义模型以及执行CRUD操作。通过Flask-SQLAlchemy的ORM功能,开发者可以方便地管理数据库表和记录。文章详细展示了如何创建模型、添加、查询、更新和删除数据,并提到了高级查询和关系映射。此外,还提及了数据库迁移工具Flask-Migrate以及性能优化和安全性问题。了解这些基础,有助于开发者构建高效、安全的Flask Web应用。
|
2月前
|
XML JSON API
通过Flask框架创建灵活的、可扩展的Web Restful API服务
通过Flask框架创建灵活的、可扩展的Web Restful API服务