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 | ...
随机推荐
- PHP中的PEAR是什么?
PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库. 补充:php中扩展pecl与pear ...
- maven执行"mvn clean package" 命令报错
昨天利用mvn打包,执行程序'mvn clean package' 命令,发现打包失败 问题描述 具体看代码 发信tomcat下的log 清除不掉.为什么呢?忽然想起来我的项目服务还起着,于是我把服务 ...
- Flyway的第一次认识
1. 引言 想到要管理数据库的版本,是在实际产品中遇到问题后想到的一种解决方案,当时各个环境的数据库乱作一团,没有任何一个人(开发.测试.维护人员)能够讲清楚当前环境下的数据库是哪个版本,与哪个版本 ...
- Springboot 和 Mybatis集成开发
Springboot 和 Mybatis集成开发 本项目使用的环境: 开发工具:Intellij IDEA 2017.1.3 jdk:1.7.0_79 maven:3.3.9 额外功能 PageHel ...
- Java代码中谁拿到了锁?
我们都知道当一个线程试图访问同步代码块时,它首先必须得到锁,退出或抛出异常时必须释放锁.这些基础也许大家都知道,但是很多人还是搞不清哪个对象才是锁?如果你能正确回答以下问题,那么才算你彻底搞明白了哪个 ...
- struts2针对mvc的框架 spring针对解耦与事务的框架
struts2针对mvc的框架 spring针对解耦与事务的框架
- ansible操作(一)
ansible晋级操作之ad-hoc命令 所谓的ad-hoc命令! 如果我们敲入一些命令去比较快的完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令.Ansib ...
- win10与Ubantu双系统:Linux下开启FTP服务器与创建无线热点(实现文件共享)
如何在win系统下使用filelizza这个软件搭建FTP服务器,然后建立一个无线局域网,让平板终端连接以后,访问电脑硬盘的文件. 如果是只在win7环境下,一切都很简单,按照上文提供的教程就可以实现 ...
- vyatta的fork开源版本vyos
vyatta的fork开源版本vyos 来源: https://www.reddit.com/r/networking/comments/3dvwfy/who_here_is_using_vyos/ ...
- jQuery EasyUI 下拉菜单获取日期,最高年份为当前年份,最低年份为当前年份向前推10年
http://blog.csdn.net/wangjingjing1014/article/details/16885341 <head><meta http-equiv=" ...