sqlalchemy 基操,勿6
- 使用前请先安装sqlalchemy
- 创建数据表
# 导入官宣基础模型 from sqlalchemy.ext.declarative import declarative_base # 实例化官宣模型 - Base 就是 ORM 模型 Base = declarative_base() # 当前的这个Object继承了Base也就是代表了Object继承了ORM的模型 class User(Base): # 相当于 Django Models中的 Model# 为Table创建名称__tablename__ = "user"# 创建ID数据字段 , 创建ID字段 == 创建ID数据列from sqlalchemy import Column,Integer,String# id = Column(数据类型,索引,主键,外键,等等)# int == Integerid = Column(Integer,primary_key=True,autoincrement=True)# str == char(长度) == String(长度)name = Column(String(32),index=True) # 去连接数据库 创建数据引擎 from sqlalchemy import create_engine # 创建的数据库引擎 engine = create_engine("mysql+pymysql://root:这里是sql密码没有可以不写@127.0.0.1:3306/dragon?charset=utf8")# Base 自动检索所有继承Base的ORM 对象 并且创建所有的数据表 Base.metadata.create_all(engine)
- 增删改查 (单表)
# 导入创建好的User和engine from create_table import engine,User # 导入 sqlalchemy.orm 中的 sessionmaker 就是创建一个操纵数据库的窗口 from sqlalchemy.orm import sessionmaker # 创建 sessionmaker 会话对象,将数据库引擎 engine 交给 sessionmaker Session = sessionmaker(engine) # 打开会话对象 Session db_session = Session()# 方法一 # 创建数据 user_obj = User(name="jamlee") # 在db_session会话中添加一条 UserORM模型创建的数据 db_session.add(user_obj) # 使用 db_session 会话提交 , 这里的提交是指将db_session中的所有指令一次性提交 db_session.commit() db_session.close()# 方法二 提交多条数据 db_session.add_all([User(name="123"),User(name="wqz"),User(name="ywb"), ])db_session.commit() db_session.close()
添加数据
from create_table import User,engine from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) db_session = Session()res = db_session.query(User).filter(User.name=="ywb").update({"name":"猪"}) print(res) # res就是我们当前这句更新语句所更新的行数 db_session.commit() db_session.close()# 修改多条 res = db_session.query(User).filter(User.id <= 20).update({"name":"猪头"}) print(res) db_session.commit() db_session.close()
修改数据
from create_table import User,engine from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) db_session = Session()# 查询所有 user_list = db_session.query(User).all() for row in user_list:print(row.id,row.name)# 查询第一条 user = db_session.query(User).first() print(user.name)# 查询符合条件的所有 user = db_session.query(User).filter(User.name == "alex").all() print(user[0].name)# 查询符合条件的第一条 user = db_session.query(User).filter_by(id=4).first() print(user.id,user.name)# 查询sql原始语句 user = db_session.query(User) print(user)最后记得都要关闭哦 db_session.close()
查看数据
from create_table import engine,User from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine) db_session = Session()db_session.query(User).filter(User.id==4).delete() db_session.commit() db_session.close()
删除数据
from my_create_table import User,engine from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine) db_session = Session()# 查询数据表操作 # and or from sqlalchemy.sql import and_ , or_ ret = db_session.query(User).filter(and_(User.id > 3, User.name == 'jamlee')).all() ret = db_session.query(User).filter(or_(User.id < 2, User.name == 'jamlee')).all()# 查询所有数据 r1 = db_session.query(User).all()# 查询数据 指定查询数据列 加入别名 r2 = db_session.query(User.name.label('username'), User.id).first() print(r2.id,r2.username) # 表达式筛选条件 r3 = db_session.query(User).filter(User.name == "jamlee").all()# 原生SQL筛选条件 r4 = db_session.query(User).filter_by(name='jamlee').all() r5 = db_session.query(User).filter_by(name='jamlee').first()# 字符串匹配方式筛选条件 并使用 order_by进行排序 r6 = db_session.query(User).filter(text("id<:value and name=:name")).params(value=224, name='jamlee').order_by(User.id).all()#原生SQL查询 r7 = db_session.query(User).from_statement(text("SELECT * FROM User where name=:name")).params(name='jamlee').all()# 筛选查询列 # query的时候我们不在使用User ORM对象,而是使用User.name来对内容进行选取 user_list = db_session.query(User.name).all() print(user_list) for row in user_list:print(row.name)# 别名映射 name as nick user_list = db_session.query(User.name.label("nick")).all() print(user_list) for row in user_list:print(row.nick) # 这里要写别名了# 筛选条件格式 user_list = db_session.query(User).filter(User.name == "jamlee").all() user_list = db_session.query(User).filter(User.name == "jamlee").first() user_list = db_session.query(User).filter_by(name="jamlee").first() for row in user_list:print(row.nick)# 复杂查询 from sqlalchemy.sql import text user_list = db_session.query(User).filter(text("id<:value and name=:name")).params(value=3,name="jamlee")# 查询语句 from sqlalchemy.sql import text user_list = db_session.query(User).filter(text("select * from User id<:value and name=:name")).params(value=3,name="jamlee")# 排序 : user_list = db_session.query(User).order_by(User.id).all() user_list = db_session.query(User).order_by(User.id.desc()).all() for row in user_list:print(row.name,row.id)#其他查询条件 """ ret = session.query(User).filter_by(name='jamlee').all() ret = session.query(User).filter(User.id > 1, User.name == 'jamlee').all() ret = session.query(User).filter(User.id.between(1, 3), User.name == 'jamlee').all() # between 大于1小于3的 ret = session.query(User).filter(User.id.in_([1,3,4])).all() # in_([1,3,4]) 只查询id等于1,3,4的 ret = session.query(User).filter(~User.id.in_([1,3,4])).all() # ~xxxx.in_([1,3,4]) 查询不等于1,3,4的 ret = session.query(User).filter(User.id.in_(session.query(User.id).filter_by(name='jamlee'))).all() 子查询 from sqlalchemy import and_, or_ ret = session.query(User).filter(and_(User.id > 3, User.name == 'jamlee')).all() ret = session.query(User).filter(or_(User.id < 2, User.name == 'jamlee')).all() ret = session.query(User).filter(or_(User.id < 2,and_(User.name == 'eric', User.id > 3),User.extra != "")).all() # select * from User where id<2 or (name="eric" and id>3) or extra != "" # 通配符 ret = db_session.query(User).filter(User.name.like('e%')).all() ret = db_session.query(User).filter(~User.name.like('e%')).all()# 限制 ret = db_session.query(User)[1:2]# 排序 ret = db_session.query(User).order_by(User.name.desc()).all() ret = db_session.query(User).order_by(User.name.desc(), User.id.asc()).all()# 分组 from sqlalchemy.sql import funcret = db_session.query(User).group_by(User.extra).all() ret = db_session.query(func.max(User.id),func.sum(User.id),func.min(User.id)).group_by(User.name).all()ret = db_session.query(func.max(User.id),func.sum(User.id),func.min(User.id)).group_by(User.name).having(func.min(User.id) >2).all() """# 关闭连接 db_session.close()
更多查询方法
#高级版更新操作 from my_create_table import User,engine from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine) db_session = Session()#直接修改 db_session.query(User).filter(User.id > 0).update({"name" : "099"})#在原有值基础上添加 - 1 db_session.query(User).filter(User.id > 0).update({User.name: User.name + "099"}, synchronize_session=False)#在原有值基础上添加 - 2 db_session.query(User).filter(User.id > 0).update({"age": User.age + 1}, synchronize_session="evaluate") db_session.commit()
更多更新方法
- ForeignKey (一对多)
- 创建数据表+relationship
from sqlalchemy.ext.declarative import declarative_base # 关系映射 from sqlalchemy.orm import relationship from sqlalchemy import Column, Integer, String, ForeignKeyBase = declarative_base()class Student(Base):__tablename__ = "student"id = Column(Integer,primary_key=True)name = Column(String(32))# 关联字段 主外键关系(这里的ForeignKey一定要是表名.id不是对象名)school_id = Column(Integer,ForeignKey("school.id"))# 将student 和school创建关系 这个不是字段,只是关系,backref是反向关联的关键字stu2sch = relationship("School",backref = "sch2stu")class School(Base):__tablename__ = "school"id = Column(Integer, primary_key=True)name = Column(String(32))from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/userinfo?charset=utf8") Base.metadata.create_all(engine)
- 增删改查
from sqlalchemy.orm import sessionmaker from create_table import engine, Student, SchoolSession = sessionmaker(engine) db_session = Session()# 先演示一下笨方法 sch = db_session.query(School).filter(School.name == "清华").first() stu_obj = Student(name="jamlee",school_id=sch.id) db_session.add(stu_obj) db_session.commit() db_session.close()# 开始表演 正向插入 stu_obj = Student(name="wqz",stu2sch=School(name = "北大")) db_session.add(stu_obj) db_session.commit() db_session.close()# 反向插入 sch_obj = School(name="复旦") sch_obj.sch2stu = [Student(name="123"),Student(name="ywb")] db_session.add(sch_obj) db_session.commit() db_session.close()
基于relationship添加数据
from sqlalchemy.orm import sessionmaker from create_table import engine,Student,SchoolSession = sessionmaker(engine) db_session = Session()# 正向查询 stu = db_session.query(Student).all() for row in stu:print(row.id,row.name,row.school_id,row.stu2sch.name)# 反向查询 sch = db_session.query(School).all() for school in sch:for student in school.sch2stu:print(school.id,school.name,student.name)
基于relationship查询数据
from sqlalchemy.orm import sessionmaker from create_table import engine,Student,SchoolSession = sessionmaker(engine) db_session = Session()sch = db_session.query(School).filter(School.name=="清华").first() db_session.query(Student).filter(Student.name=="wqz").update({"school_id":sch.id}) db_session.commit() db_session.close()
基于relationship修改数据
from sqlalchemy.orm import sessionmaker from create_table import engine,Student,SchoolSession = sessionmaker(engine) db_session = Session()sch = db_session.query(School).filter(School.name=="北大").first() db_session.query(Student).filter(Student.school_id==sch.id).delete() db_session.commit() db_session.close()
基于relationship删除数据
- ManyToMany(多对多)
- 创建表
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationshipclass Girls(Base):__tablename__ = "girl"id = Column(Integer,primary_key=True)name = Column(String(32))girl2boy = relationship("Boys",secondary="hotel",backref="boy2girl")class Boys(Base):__tablename__ = "boy"id = Column(Integer, primary_key=True)name = Column(String(32))class Hotel(Base):__tablename__ = "hotel"id = Column(Integer, primary_key=True)girl_id = Column(Integer, ForeignKey("girl.id"))boy_id = Column(Integer, ForeignKey("boy.id"))from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/userinfo?charset=utf8")Base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker from create_table import engine,Boys,GirlsSession = sessionmaker(engine) db_session = Session()# 正向 girl_obj = Girls(name="热巴",girl2boy=[Boys(name="jamlee"),Boys(name="wqz")]) db_session.add(girl_obj) db_session.commit() db_session.close()# 反向 boy = Boys(name="GD") boy.boy2girl = [Girls(name="IU"),Girls(name="YWB")] db_session.add(boy) db_session.commit() db_session.close()
多对多添加
from sqlalchemy.orm import sessionmaker from create_table import engine,Boys,GirlsSession = sessionmaker(engine) db_session = Session()# 正向 g_list =db_session.query(Girls).all()for girl in g_list:for boy in girl.girl2boy:print(girl.name,boy.name)# 反向 b_list = db_session.query(Boys).all() for boy in b_list:for girl in boy.boy2girl:print(boy.name,girl.name)
多对对查询
转载于:https://www.cnblogs.com/lzmdbk/p/10384778.html
sqlalchemy 基操,勿6相关推荐
- itextpdf添加表格元素_基操勿6第四期:PPT表格美化
大家好,这里是"基操勿6"的第四期内容,我是阿远. 原本按我的计划是要先把PPT里面一些大家可能不太清楚,但是却很好用的操作先给大家做一遍分享.希望大家用到的时候,可以在同事震惊的 ...
- EndNote文献管理(二)基操勿六
1.创建文献数据库并添加文献 1.1创建文献数据库 1.2在线检索 1.3批量导入 1.4导入知网文献 2.文献管理 2.1文献标记与排序 2.2文献速览与下载全文 2.3文献阅读与批注 3.编辑参考 ...
- LINUX GPIO 基操之驱动篇
LINUX GPIO 基操之驱动篇 GPIO 子系统操作GPIO GPIO子系统接口简介 单个GPIO GPIO数组 PINCTRL 子系统操作GPIO pinctrl 子系统相关接口 使用例子 pr ...
- ThinkPHP6项目基操(15.实战部分 阿里云短信redis)
阿里云短信redis 一.安装阿里云短信SDK 二.封装到项目lib中 三.radis记录验证码 1. 安装redis服务 2. 可视化redis管理软件 3. PHP安装redis扩展 4. 配置缓 ...
- 面试基操:MQ怎么保障消息可靠性?
面试官:在MQ的整个消息生产消费过程中,如何保障消息100%被消费? 候选人:MQ有个ACK机制,确保消息100%被消费. 面试官:好吧,可以回去等通知了-- 这道面试题在考察MQ组件时算是老生常谈了 ...
- ThinkPHP6项目基操目录
前言 ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色 ...
- Linux基操 笔记
Linux基操 常用命令 vim命令 进入目录 查看目录文件 查找文件 移动文件 复制文件 删除文件 解压文件到指定目录 压缩文件 linux安装jdk1.8 1.官网下载 2.root用户下 3.配 ...
- 2021-09-03 Elasticsearch基操
Elasticsearch 基操 一.Elasticsearch介绍 二.curl 基本操作 三.es 可视化工具 一.Elasticsearch介绍 二.curl 基本操作 参考:使用curl操作 ...
- 【数据结构】线性表之单向链表的八大基操
线性表可以采用顺序存储结构(依赖于数组)和链式存储结构(依赖于指针) 下面是单向链表有着八大基本操作(简称八大基操) SLinkNode.cpp: #include <stdlib.h> ...
最新文章
- 【云计算虚拟化】docker在ubuntu14.04下的安装
- java 模仿支付成功_揭秘Java工程师薪资为何这么高,教你如何成为架构师拿50W年薪!...
- 5种改善服务器日志记录的技术
- j@2ff4f00f_J4F的完整形式是什么?
- matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
- 封条格式用word怎么打_标书密封条格式全word.doc
- bpmn2.0业务过程模型和符号_IT帮业务架构学习小组学习内容
- C语言_选择结构的程序设计
- 开源 免费 java CMS - FreeCMS1.5-数据对象-guestbook
- 快递实名制正式实施 市民最担心个人信息泄露
- 【SICP练习】150 练习4.6
- 数据结构与算法分析(一)基础
- android系统无法识别u盘,OTG无法识别U盘怎么办 OTG无法识别解决方法
- uva 10158 - War(并查集)
- 《金阁寺》金阁美之于幻想,我用摧毁它来成就其美
- python画三维坐标图像_用python检索xyz坐标并绘制三维图形
- Keras-gpu版本安装教程(亲测有效)
- 任务型对话(二)—— DST(对话状态追踪)
- python生成器与迭代器_python 生成器与迭代器(yield 用法)
- SEO优化是什么意思,如何理解并学好它