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

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: Python编程:Flask数据库扩展Flask-SQLAlchemy

英文文档:http://flask-sqlalchemy.pocoo.org/2.3/

中文文档:http://www.pythondoc.com/flask-sqlalchemy/quickstart.html


安装

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()

注意  更新和删除操作先进行查询校验where条件

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
12月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
10月前
|
SQL 数据库 开发者
Python中使用Flask-SQLAlchemy对数据库的增删改查简明示例
这样我们就对Flask-SQLAlchemy进行了一次简明扼要的旅程,阐述了如何定义模型,如何创建表,以及如何进行基本的数据库操作。希望你在阅读后能对Flask-SQLAlchemy有更深入的理解,这将为你在Python世界中从事数据库相关工作提供极大的便利。
868 77
|
11月前
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
12月前
|
SQL 数据库连接 Linux
数据库编程:在PHP环境下使用SQL Server的方法。
看看你吧,就像一个调皮的小丑鱼在一片广阔的数据库海洋中游弋,一路上吞下大小数据如同海中的珍珠。不管有多少难关,只要记住这个流程,剩下的就只是探索未知的乐趣,沉浸在这个充满挑战的数据库海洋中。
379 16
|
12月前
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
存储 缓存 Java
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
1884 3
java语言后台管理ruoyi后台管理框架-登录提示“无效的会话,或者会话已过期,请重新登录。”-扩展知识数据库中密码加密的方法-问题如何解决-以及如何重置若依后台管理框架admin密码-优雅草卓伊凡
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
384 19
|
关系型数据库 MySQL API
新手教程:数据库操作(使用PDO或MySQLi扩展)
本文为新手介绍如何使用PDO和MySQLi扩展连接与操作MySQL数据库。PDO更现代灵活,支持多种数据库,适合大多数应用;MySQLi提供面向过程和面向对象两种API,适合直接控制数据库操作。教程涵盖安装配置、创建连接、执行查询(查询、插入、更新、删除)及错误处理等内容。希望这篇教程能帮助你快速上手PHP中的数据库操作!
395 32
|
关系型数据库 数据库 数据安全/隐私保护
云数据库实战:基于阿里云RDS的Python应用开发与优化
在互联网时代,数据驱动的应用已成为企业竞争力的核心。阿里云RDS为开发者提供稳定高效的数据库托管服务,支持多种数据库引擎,具备自动化管理、高可用性和弹性扩展等优势。本文通过Python应用案例,从零开始搭建基于阿里云RDS的数据库应用,详细演示连接、CRUD操作及性能优化与安全管理实践,帮助读者快速上手并提升应用性能。
|
SQL Java 数据库连接
JDBC编程安装———通过代码操控数据库
本文,教你从0开始学习JBCD,包括驱动包的下载安装调试设置,以及java是如何通过JBDC实现对数据库的操作,以及代码的分析,超级详细

热门文章

最新文章