当前位置: 首页 > news >正文

Flask使用Flask-SQLAlchemy操作MySQL数据库

前言:

Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。

学习了Flask-SQLAlchemy下MySQL的配置和增删改查,供初学者作为参考。(python3+flask)


一、pip安装扩展库

>>>pip3 install flask-sqlalchemy

>>>pip3 install flask-mysqldb


二、配置并初始化数据库

SQLALCHEMY_DATABASE_URI ,配置使用的数据库URL,而配置MySQL的URL格式为:

mysql://username:password@hostname/database

SQLALCHEMY_TRACK_MODIFICATIONS ,设置成True(默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。

 

三、创建数据库 


四、定义模型

1、最常使用的SQLAlchemy列选项

primary_key    | 如果设为True,这列就是表的主键

unique           | 如果设为True,这列不允许出现重复的值

index             | 如果设为True,为这列创建索引,提升查询效率

nullable          | 如果设为True,这列允许使用空值,False则不允许使用空值

default           | 为这列定义默认值

2、一对多关系

添加到Variable模型中的env_id列被定义为外键,就是这个外键建立起了关系。

传给db.ForeignKey()的参数'environments.id'表明,这列的值是environments.id表中行的id值。

3、关系的面向对象视角

添加到Environments模型中的variable属性代表这个关系的面向对象视角。对于一个Environments类的实例,其variable属性将返回与角色相关联的用户组成的列表。

db.relationship()的第一个参数表明这个关系的另一端是哪个模型。

db.relationship()的backref参数向Environments模型中添加一个variable属性,从而定义反向关系。

db.relationship()的lazy=dynamic参数表明:不加载记录,但提供加载记录的查询。


五、数据库操作

1、创建表

>>> db.create_all()

2、删除表

>>> db.drop_all()

3、插入行

#将variable添加到会话中

>>>db.session.add(variable)

#commit()方法提交会话

>>>db.session.commit()

4、 查询数据

(1)all(查询全部数据)

Environments.query.all()

(2)filter_by查询(精确查询)

Environments.query.filter_by(id=id).first()

(3)join(联表一对多查询)

Variable.query.filter_by(env_id=env_id,id=id).join(Environments,Variable.env_id == Environments.id).first_or_404()

(4)count(返回查询结果的数量)

Environments.query.filter_by(id=id).count()

5、删除数据

db.session.delete(variablelists)

db.session.commit()

6、删除多条数据

variablelists= Variable.query.filter_by(env_id=env_id).all()

for var in variablelists:

    db.session.delete(var)

db.session.commit()


 

 

以上,希望对你有所帮助~

 

作者:搁浅
出处: http://www.cnblogs.com/xiaoxi-3-/
如果对您有帮助,请关注我的同名简书:https://www.jianshu.com/u/da1677475c27
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章:

  • Windows Azure 网站上的 WebSocket 简介
  • 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(三)命令行工具集
  • 浅谈硬盘构造及IOPS的计算
  • 把用户加入sudo
  • 点滴积累【JS】---JS小功能(button选择颜色)
  • Nginx、LVS及HAProxy负载均衡软件的优缺点详解
  • 面向对象实验四(输入输出流)
  • 苹果屏幕分辨力和像素
  • db2还原离线备份文件报错SQL2071N 提示“访问共享库出现错误”解决
  • 动手实现Handler v1.3
  • pam_access.so
  • Http中header与body的区别
  • windows 下安装jdk
  • Hadoop HDFS Hive HBase关系图
  • 蕾丝 | 内外皆精致的女子
  • ----------
  • 【译】JS基础算法脚本:字符串结尾
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【个人向】《HTTP图解》阅后小结
  • CSS 提示工具(Tooltip)
  • docker python 配置
  • echarts的各种常用效果展示
  • Fastjson的基本使用方法大全
  • iOS 颜色设置看我就够了
  • JavaScript设计模式与开发实践系列之策略模式
  • java概述
  • Less 日常用法
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PermissionScope Swift4 兼容问题
  • PHP那些事儿
  • tweak 支持第三方库
  • 初识 webpack
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 理解在java “”i=i++;”所发生的事情
  • 面试遇到的一些题
  • 怎么把视频里的音乐提取出来
  • No resource identifier found for attribute,RxJava之zip操作符
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​你们这样子,耽误我的工作进度怎么办?
  • (10)ATF MMU转换表
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (javascript)再说document.body.scrollTop的使用问题
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)docker:Dockerfile构建容器运行jar包
  • (新)网络工程师考点串讲与真题详解
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)ABI是什么
  • (转)菜鸟学数据库(三)——存储过程
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息