sqlalchemy操作数据库(二)
sqlalchemy的基本操作
表结构如下:
from sqlalchemy import create_enginefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy import Column,String,Integerfrom sqlalchemy.orm importsessionmaker engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/data",encoding='utf8') Base = declarative_base() # 生成ORM基类# 建立表结构class Student(Base): __tablename__ = 'student' id = Column(Integer,primary_key=True) name = Column(String(32)) gender = Column(String(32)) email = Column(String(64)) Session_class = sessionmaker(bind=engine)# 创建一个session对象session = Session_class()
数据库中的数据,如图
image
1.查询并返回第一条数据
data = session.query(Student).filter_by(id=1).first()print(data)
image
咦,返回的怎么是一个obj对象,这我们怎么知道它是谁。那我们需要看到它对应的值,应该怎么做,
很简单,调用对应的参数就能显示对应的值
print(data.id,data.name,data.gender,data.email)
image
2.查询多条or所有数据
不带条件查询所有数据
data = session.query(Student).all()print(data)
all() 默认返回的是一个内存对象的列表,而内存对象不能很直观的告诉我们
数据是谁的?当我们想要看到更直观的数据时,有没有什么解决方法呢?
当然有,于是聪明的程序员就想出来了下面的方法
image
重写repr函数,使返回值更加清晰的显示
image
image
带条件查询:
data = session.query(Student).filter_by(id=1,name="狗蛋").all() print(data)
image
多条件查询:
data = session.query(Student).filter(Studet.id>=1).filter(Student.gender=="中").all() print(data)
总结:
filter_by: 用于赋值条件查询
filter: 用于判断条件查询
image
3.修改单条数据
data = session.query(Student).filter_by(id=1).first()# 修改前print(data.gender)
data.gender = "男和女"# 修改后print(data.gender)# 最后提交session.commit()
4.批量修改数据
# 修改前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后session.query(Student).filter(Student.id>=1).update({Student.name:'麒麟狗'})print(data)# 最后提交session.commit()
image
5.添加数据
# 增加前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后s_obj = Student(name='小呆',gender='男',email='10000@qq.com')
session.add(s_obj)# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正添加data = session.query(Student).filter(Student.id>=1).all()print(data)
image
image
6.批量增加数据
# 增加前data = session.query(Student).filter(Student.id>=1).all()print(data)# 修改后lis = []for i in range(10):
s_obj = Student(name='小呆'+str(i),gender='男',email='10000%s@qq.com'%i)
lis.append(s_obj)
session.add_all(lis)# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正添加data = session.query(Student).filter(Student.id>=1).all()print(data)
image
image
7.删除数据
# 删除前data = session.query(Student).filter(Student.id>=1).all()print(data)# 删除后session.query(Student).filter_by(id=1).delete()# 此时还没有添加到数据库print(data)# 最后提交session.commit()# 这时候数据才真正删除data = session.query(Student).filter(Student.id>=1).all()print(data)
删除多条数据与增加雷同,就不做介绍了
image
image
8.回滚
data = session.query(Student).filter(Student.id>=1).all()print(data)
s = Student(name='胖毛')
session.add(s)
data = session.query(Student).filter(Student.id>=1).all()print(data)# 回滚session.rollback()
image
image
SQLalchemy的增删查改就介绍到这里为止了。
sqlalchemy操作数据库(二)的更多相关文章
- python 连接操作数据库(二)
一.我们接着上期的博客继续对ORM框架进行补充,顺便把paramiko模块也给大家讲解一下: 1.ORM框架: 在连接操作数据库的第一个博客中也已经说了,sqlalchemy是一个ORM框架,总结就是 ...
- Python3.x:SQLAlchemy操作数据库
Python3.x:SQLAlchemy操作数据库 前言 SQLAlchemy是一个ORM框架(Object Rational Mapping,对象关系映射),它可以帮助我们更加优雅.更加高效的实现数 ...
- SqlAlchemy操作(二)
SQLALchemy初始化链接数据库 1. 数据库配置. https://www.cnblogs.com/mengbin0546/p/10124560.html 2. python端操作. 一. ...
- 04:sqlalchemy操作数据库
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- 04:sqlalchemy操作数据库 不错
目录: 1.1 ORM介绍(作用:不用原生SQL语句对数据库操作) 1.2 安装sqlalchemy并创建表 1.3 使用sqlalchemy对表基本操作 1.4 一对多外键关联 1.5 sqlalc ...
- python如何用sqlalchemy操作数据库
工具:mysql python sqlalchemy ---------------------------------------- 准备工作: 1.安装mysql 如果是window环境请参考 ...
- SQLAlchemy 操作数据库
首先安装 SQLAlchemy install PyMySQL install sqlalchemy 代码: #!/usr/bin/env python # encoding: utf-8 " ...
- 13、Flask实战第13天:SQLAlchemy操作MySQL数据库
安装MySQL 在MySQL官网下载win版MySQL 双击运行 后面根据提示设置密码然后启动即可,这里我设置的密码是:123456 我们可以通过Navicat客户端工具连接上MySQL addres ...
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
随机推荐
- [cnbeta] 波音系列飞机价格。。。
https://www.cnbeta.com/articles/tech/786745.htm 单价最便宜的是波音737-700,为0.858亿美元(约合5.96亿元). 评论网友调侃,“你家能满40 ...
- intel 的架构图
第一代: 第二代 第三代 以及对比
- vue 组件 模板input双向数据数据
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>T ...
- 第215天:Angular---指令
指令(Directive) AngularJS 有一套完整的.可扩展的.用来帮助 Web 应用开发的指令集 在 DOM 编译期间,和 HTML 关联着的指令会被检测到,并且被执行 在 AngularJ ...
- TypeError: to_categorical() got an unexpected keyword argument 'nb_classes'
在学习莫烦教程中keras教程时,报错:TypeError: to_categorical() got an unexpected keyword argument 'nb_classes',代码如下 ...
- 关于IT个人看法
对于理科生来说,理论和技术都是相当重要的,我很爱钻牛角尖,但是请理解‘固执的我’, 本人选择IT行业,其实也是偶然,带着质疑的眼光,成为了众多IT男中毫无‘特色’的一员,回忆 学习阶段,逐渐认识了IT ...
- [UVALive 2678] Subsequence
图片加载可能有点慢,请跳过题面先看题解,谢谢 在切水题的道路上狂奔,一发不可收拾... 这道题好像不用写什么题解吧,吐个槽什么的算了 一眼题,大佬们都不屑于做,只有我这种弱菜才来写这种题目玩儿 记个前 ...
- 【Cf #502 H】The Films(莫队)
题面的简述:总共有$m$种书,书架上共有$n$本书,给出$n$本书的种类,并有$Q$个询问,每次询问给出$l, r, k$.每次询问时都会先出现$k * m$本书,每种书各$k$本,然后再加入书架上的 ...
- 20135319zl字符集报告
字符集实验 ASCII 首先,查找ZHULI五个字符对应的ASCII码,5a 48 55 4c 49. 然后,用vim打开一个空文档,按下":",输入%!xxd 然后,输入 000 ...
- opencv imread值为空
调试程序错误如下: 此时test.jpg文件放在了sln解决方案文件夹内,并没有放在proj项目文件夹内,放到项目文件夹下后,调试如下图 这时候img就读取到图像了,最终显示图像如下,显示的很大,再研 ...