Flask开发之数据库(SQLAlchemy)的配置以及增删改查
Flask开发之数据库 (SQLAlchemy)的配置以及增删改查
- 1.在Flask中配置SQLAlchemy
- 1 安装flask-sqlalchemy
- 2 安装flask-mysqldb
- 3 在代码中的配置:
- 2.常用的SQLAlchemy字段类型
- 3.常用的SQLAlchemy列选项
- 4.常用的SQLAlchemy关系选项
- 5.在视图函数中定义模型类
- 6.数据库的增删改查
- 1 常用的SQLAlchemy查询过滤器
- 2.常用的SQLAlchemy查询执行器
- 3 插入一条或者多条数据
- 4.删除数据
- 5.修改数据
- 6.查询数据
- 7.数据库迁移
- 1 安装Flask-Migrate和flask_script
- 2 添加迁移代码
- 3 创建迁移仓库
- 4 创建迁移脚本
- 5 更新数据库
- 6 回退数据库
前言:SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。
1.在Flask中配置SQLAlchemy
1 安装flask-sqlalchemy
pip install flask-sqlalchemy
2 安装flask-mysqldb
pip install flask-mysqldb
3 在代码中的配置:
class Config(object):"""配置参数"""# sqlalchemy的配置参数SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"# 设置sqlalchemy自动更跟踪数据库SQLALCHEMY_TRACK_MODIFICATIONS = True# 设置每次请求结束后会自动提交数据库中的改动SQLALCHEMY_COMMIT_ON_TEARDOWN = True# 查询时会显示原始SQL语句SQLALCHEMY_ECHO = Trueapp.config.from_object(Config)
db = SQLAlchemy(app)
2.常用的SQLAlchemy字段类型
3.常用的SQLAlchemy列选项
4.常用的SQLAlchemy关系选项
5.在视图函数中定义模型类
注意:需要在命令行操作
from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)class Config(object):"""配置参数"""# sqlalchemy的配置参数SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"# 设置sqlalchemy自动更跟踪数据库SQLALCHEMY_TRACK_MODIFICATIONS = True# 设置每次请求结束后会自动提交数据库中的改动SQLALCHEMY_COMMIT_ON_TEARDOWN = True# 查询时会显示原始SQL语句SQLALCHEMY_ECHO = Trueapp.config.from_object(Config)
db = SQLAlchemy(app)# 定义数据库的模型
class Author(db.Model):"""作者"""__tablename__ = "author"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(32), unique=True)books = db.relationship("Book", backref="author")class Book(db.Model):"""书籍"""__tablename__ = "book"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(64), unique=True)author_id = db.Column(db.Integer, db.ForeignKey("author.id"))if __name__ == '__main__':db.drop_all() #第一次执行的时候操作db.create_all()#创建表# app.run(debug=True)
6.数据库的增删改查
1 常用的SQLAlchemy查询过滤器
2.常用的SQLAlchemy查询执行器
3 插入一条或者多条数据
def add_one():"""添加单个数据"""user1 = Author(name="fly1")db.session.add(user1)db.session.commit()bk_user1 = Book(name='fly自传', author_id=user1.id)db.session.add(bk_user1)db.session.commit()def add_many():"""添加多个数据"""au_xi = Author(name='我吃西红柿')au_qian = Author(name='萧潜')au_san = Author(name='唐家三少')db.session.add_all([au_xi, au_qian, au_san])db.session.commit()bk_xi = Book(name='吞噬星空', author_id=au_xi.id)bk_xi2 = Book(name='寸芒', author_id=au_qian.id)bk_qian = Book(name='飘渺之旅', author_id=au_qian.id)bk_san = Book(name='冰火魔厨', author_id=au_san.id)db.session.add_all([bk_xi, bk_xi2, bk_qian, bk_san])db.session.commit()
4.删除数据
def delete():"""删除数据"""author = Author.query.filter_by(name="唐家三少").first()db.session.delete(author)db.session.commit()
5.修改数据
def update():"""更新数据"""book = Book.query.filter_by(name="吞噬星空").first()book.name = '吞噬星空2'db.session.commit()Author.query.filter_by(name='zhang').update({'name': 'li'})pass
6.查询数据
def query():"""查询数据"""# r1 = Book.query.all() #查询所有# r2 = Book.query.filter_by(name="吞噬星空").all() #根据条件查询r3 = Book.query.filter_by(name="吞噬星空").first() # 根据条件查询 第一个# r4 = Book.query.first() #查询第一个# r5 = Book.query.filter(Author.name.endswith('g')).all() #模糊查询print(r3)print(type(r3))
7.数据库迁移
在开发过程中,需要修改数据库模型,这样就可以使用Flask-Migrate来进行数据的迁移。
1 安装Flask-Migrate和flask_script
pip install flask-migrate
pip install flask_script
2 添加迁移代码
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate,MigrateCommand
from flask_script import Shell,Managerapp = Flask(__name__)manager = Manager(app)class Config(object):"""配置参数"""# sqlalchemy的配置参数SQLALCHEMY_DATABASE_URI = "mysql://root:root@127.0.0.1:3306/flask_demo"# 设置sqlalchemy自动更跟踪数据库SQLALCHEMY_TRACK_MODIFICATIONS = True# 设置每次请求结束后会自动提交数据库中的改动SQLALCHEMY_COMMIT_ON_TEARDOWN = True# 查询时会显示原始SQL语句SQLALCHEMY_ECHO = Trueapp.config.from_object(Config)
db = SQLAlchemy(app)#第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例
migrate = Migrate(app,db)#manager是Flask-Script的实例,这条语句在flask-Script中添加一个db命令
manager.add_command('db',MigrateCommand)# 定义数据库的模型
class Author(db.Model):"""作者"""__tablename__ = "author"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(32), unique=True)books = db.relationship("Book", backref="author")class Book(db.Model):"""书籍"""__tablename__ = "book"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(64), unique=True)author_id = db.Column(db.Integer, db.ForeignKey("author.id"))if __name__ == '__main__':manager.run()
3 创建迁移仓库
python app.py db init
4 创建迁移脚本
python app.py db migrate -m ‘initial migration’
5 更新数据库
python app.py db upgrade
6 回退数据库
python database.py db downgrade 版本号
结束!!!
Flask开发之数据库(SQLAlchemy)的配置以及增删改查相关推荐
- SQLite 数据库安装、创建、增删改查(一)
目录 一.学习资料 二.下载软件 1.SQLite 2.SQLiteStudio 3.Navicat 15 for SQLite 4.System.Data.SQLite.dll 三.创建数据库 1. ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查
基于 abp vNext 和 .NET Core 开发博客项目 - 自定义仓储之增删改查 转载于:https://github.com/Meowv/Blog 本篇说一下自定义仓储的实现方式,其实在ab ...
- C++数据库编程 MySQL Connecttor C++增删改查
C++数据库编程简介 C++数据库编程 ODBC简介 C++数据库编程 ODBC连接SQL Server数据库 C++数据库编程 ODBC插入数据 C++数据库编程 ODBC查询数据 C++数据库编程 ...
- MySQL数据库基本操作详解(数据库概述、基本操作、增删改查等)
目录 MySQL数据库概述 MySQL数据库的基本操作 MySQL数据库的表的操作 MySQL数据库的增删查改(CRUD) MySQL数据库概述: 初来乍到,什么是数据库?数据库就是存储数据的仓库,我 ...
- sqlalchemy 对 mysql 进行增删改查
我其实还是喜欢原生的 sql 语句,sqlalchemy是对pymysql的封装,用的时候经常出各种错误.但是orm操作较简单,可以实现外键的关联操作. 视频 https://www.bilibili ...
- SQLAlchemy的使用---M2M增删改查
SQLAlchemy的使用---M2M增删改查 from sqlalchemy.orm import sessionmaker from sqlalchemy_M2M import engine, G ...
- Unity 2021连接外网数据库,建表,增删改查遇到的问题记录
目录 一.连接外网数据库遇到的问题 二.解决问题的方案 动态链接库下载地址: 效果图 一.连接外网数据库遇到的问题 先抛出问题,就是连接内网数据库不会报错,连接外网时和查询时就报这个错: The gi ...
- MySQL数据库安装以及SQL基本增删改查
目录 1.介绍下数据库 1.1.DB概念和特点 1.2.常见DB软件 1.3.数据库结构 2.MySQL安装与使用 2.1.安装 2.2.卸载 2.3.MySQL服务启动与关闭 2.4.MySQL登录 ...
- Bootstrap4+MySQL前后端综合实训-Day05-AM【MySQL数据库(SQLyog软件基本操作、架构设计器)、eclipse(JDBC开发-添加驱动、构建路径、增删改查基本测试)】
[Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目 录 MySQL数据库--建库.建表 新建连接.测试连接 新建news_manager数据库 ...
最新文章
- Python图片爬取方法总结
- 2017-2018-1 20155222 《信息安全系统设计基础》第8周学习总结
- 【收藏】goland报错:报错package xxx is not in GOROOT or GOPATH 或者 cannot find package “xxx“ in any of
- 在网页中的flash游戏,按方向键浏览器的滚动条会跟着滚动
- vscode 新建python 终端
- 大一C语言和线性代数,有谁学过线性代数和C语言啊?
- DataGrid添加CheckBox(下拉列表)
- Web应用程序中Resource Bundle技术概述
- 宝塔控制面板如何添加伪静态
- python-Excel操作(xlrd读,xlwt写)
- 国内十大白银期货APP最新排名
- Scratch快速入门(一)
- Windows10 深度美化
- 夜游灯光表演如何更好的丰富游客体验
- 135编辑器嵌入html,135编辑器教程|三步教你搞定表格样式
- 【MySQL】insert into 和select 搭配使用进行表间复制
- 加州欧文计算机工程专业,加州大学欧文分校计算机工程博士专业排名
- 开脑洞:数字文明的等级
- Excel 利用histogram统计数据频数
- Javascript 16进制转有符号的10进制整数
热门文章
- 【CSS-03】radio+img居中对齐
- 蚂蚁金服nlp大赛经验分享
- Leetcode周赛295记录
- AX2012服务器配置--Windows Server 2012 如何实现多个用户远程桌面登陆?
- python去掉人像白边_使用matplotlib而不保存imag时删除图像周围的白色边框
- 实现数字到Excel中列序号的转换
- 群晖 nas 升级内存 手记(DS218+)
- 使用POI将数据库导出为excel表格
- 多媒体播放器-VLC media player提供下载
- python制作微信个人二维码_Python制作微信机器人,随时陪你聊天