ORM之SQLAlchemy
在Python中, 最有名的ORM框架是SQLAlchemy.
SQLAlchemy安装 :
pip install sqlalchemy
使用(建立数据库表) :
# 1.创建一个 Class from sqlalchemy.ext.declarative import declarative_base # 2.导入数据库引擎 from sqlalchemy import create_engine # 3.导入表结构关键字 from sqlalchemy import Column,Integer,INT,INTEGER,VARCHAR,String # base是Orm模型的基类 Base = declarative_base() # 创建数据库引擎 engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/sqlalchemy?charset=utf8")class User(Base):# 表名__tablename__ = "user"# 表的结构(Column表示字段, Integer表示数字类型, authincrement表示自增)id = Column(Integer,primary_key=True,autoincrement=True)name = Column(String(32),index=True)# 3.将所有的继承Base的Class序列化成数据表 Base.metadata.create_all(engine)
数据的增删改查
1. 增加数据
""" 1. 选中数据库 - 创建数据库引擎, 导入数据库引擎 2. 创建查询窗口, 必须是选中数据库的查询窗口 3. 创建sql语句 4. 运行 """# 增加单条数据 from sqlalchemy.orm import sessionmaker Session_win = sessionmaker(engine) # 打开查询窗口 db_session = Session_win()user_obj = User(name = "xxx") # 创建sql语句 db_session.add(user_obj) # 将sql语句在查询窗口进行添加 db_session.commit() # 执行全部的sql语句 db_session.close() # 关闭查询窗口# 增加多条数据 user_obj_list = [User(name="xxx"), User(name="ddd")] db_session.add_all(user_obj_list) db_session.commit() db_session.close()
2. 更新数据
from sqlalchemy.orm import sessionmaker Session_win = sessionmaker(engine) # 打开查询窗口 db_session = Session_win()# 修改单条数据 user_obj = db_session.query(User).filter(User.id == 1).update({"name":"aaa"}) db_session.commit() # query参数确定要操作的表, filter参数表示查询条件, 用来确定要修改的数据# 修改多条数据 user_obj = db_session.query(User).filter(User.id >= 1).update({"name":"666"}) db_session.commit() # 表示将User表内id>=1的字段的"name"都更改为"666"
3. 查询数据
from sqlalchemy.orm import sessionmaker Session_win = sessionmaker(engine) # 打开查询窗口 db_session = Session_win()# 简单查询 user_obj = db_session.query(User).first() # 取User表内的第一个元素 print(user_obj.id, user_obj.name)user_obj_list = db_session.query(User).all() # 去User表内的全部元素 for row in user_obj_list:print(row.id, row.name)# 带条件的查询 user_obj_list = db_session.query(User).filter(User.id <= 2, User.name == "xxx").all() # filter参数形式是: 表名.字段名; 并且条件可以含有一定的范围性 # filter内多个参数条件是 " & " 的关系 for row in user_obj_list:print(row.id, row.name)user_obj_list = db_session.query(User).filter_by(id=2, name="aaa").all() # filter_by参数形式: 字段名; 条件是以传参的方式进行筛选 for row in user_obj_list:print(row.id, row.name)
4. 删除数据
from sqlalchemy.orm import sessionmaker Session_win = sessionmaker(engine) # 打开查询窗口 db_session = Session_win()# 删除单条数据 db_session.query(User).filter(User.id == 1).delete() db_session.commit()# 删除多条数据 db_session.query(User).filter(User.id >= 1).delete() db_session.commit()
带外键关系的数据表
1. 创建表
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()from sqlalchemy import Column,INT,VARCHAR,ForeignKey from sqlalchemy.orm import relationship # 多表建立关系的字段class Student(Base):__tablename__ = "student"id = Column(INT,primary_key=True)name = Column(VARCHAR(32))school_id = Column(INT,ForeignKey("school.id")) # 外键字段关系stu2sch = relationship("School",backref="sch2stu") # orm层面的关系class School(Base):__tablename__ = "school"id = Column(INT,primary_key=True)name = Column(VARCHAR(32))from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/sqlalchemy?charset=utf8")Base.metadata.create_all(engine) # 创建表 # Base.metadata.drop_all(engine) # 删除表
2. 增加数据
from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine) db_session = Session()# 1. 笨方法增加数据 sch_obj = School(name="xxx") db_session.add(sch_obj) db_session.commit()sch_obj = db_session.query(School).filter(School.name=="xxx").first() # 查询 stu_obj = Student(name="aaa",school_id=sch_obj.id) db_session.add(stu_obj) db_session.commit()# 2 Relationship 版 添加数据操作 - 正向 stu_obj = Student(name="aaa",stu2sch=School(name="xxx")) db_session.add(stu_obj) db_session.commit()# 3 Relationship 版 添加数据操作 - 反向 sch_obj = School(name="xxx") sch_obj.sch2stu = [Student(name="aaa"),Student(name="ccc")] db_session.add(sch_obj) db_session.commit()
3. 查询数据
from sqlalchemy.orm import sessionmakerSession = sessionmaker(engine) db_session = Session()# 1.查询 笨方法 sch_obj = db_session.query(School).filter(School.name == "xxx").first() beijing_stu_obj = db_session.query(Student).filter(Student.school_id == sch_obj.id).first() print(beijing_stu_obj.name, sch_obj.name)# 2.relationship 正向查询 stu_obj = db_session.query(Student).filter(Student.name=="aaa").first() print(stu_obj.name, stu_obj.stu2sch.name)# 3.relationship 反向查询 sch_obj_list = db_session.query(School).all() for row in sch_obj_list:for stu in row.sch2stu:print(row.name, stu.name)
多对多关系的数据表
1. 建立表
from sqlalchemy.ext.declarative import declarative_base Base = 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))g2b = relationship("Boys",backref="b2g",secondary="hotel")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)boy_id = Column(Integer,ForeignKey("boy.id"))girl_id = Column(Integer,ForeignKey("girl.id"))from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://root:@127.0.0.1:3306/sqlalchemy?charset=utf8")Base.metadata.create_all(engine)
2. 增加数据
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) db_session = Session()# 1.增加数据 - relationship 正向 girl_obj = Girls(name="aaa") girl_obj.g2b = [Boys(name="bbb")] db_session.add(girl_obj) db_session.commit()# 2.增加数据 - relationship 反向 boy_obj = Boys(name="ccc") boy_obj.b2g = [Girls(name="ggg"),Girls(name="hhh")] db_session.add(boy_obj) db_session.commit()
3. 查询数据
from sqlalchemy.orm import sessionmaker Session = sessionmaker(engine) db_session = Session()# 1.查询数据 - relationship 正向 girl_obj_list = db_session.query(Girls).all() for girl in girl_obj_list:for boy in girl.g2b:print(girl.name,boy.name)# 2.查询数据 - relationship 反向 boy_obj_list = db_session.query(Boys).all() for boy in boy_obj_list:for girl in boy.b2g:print(girl.name,boy.name)
转载于:https://www.cnblogs.com/dong-/p/10402787.html
ORM之SQLAlchemy相关推荐
- ORM框架SQLAlchemy学习笔记
ORM框架SQLAlchemy 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之 ...
- python安装orm_Python流行ORM框架sqlalchemy安装与使用教程
本文实例讲述了Python流行ORM框架sqlalchemy安装与使用.分享给大家供大家参考,具体如下: 安装 1.安装 #进入虚拟环境 #执行 ./python3 -m pip install im ...
- Python与数据库[2] - 关系对象映射/ORM[4] - sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- 27.Python数据库操作(一)【内置数据库SQLite和ORM框架SQLAlchemy】
目录: 每篇前言: Python数据库操作(一) 1.1 SQLite 1.2 ORM框架SQLAlchemy 每篇前言:
- Python与数据库[2] - 关系对象映射/ORM[1] - sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: 1 ...
- DAY11-MYSQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- sqlalchemy exists 子查询_学好ORM框架SQLAlchemy面试必问
首先我们先来了解一下SQLAlchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然 ...
- eric python mysql,python入门教程13-07 (python语法入门之ORM框架SQLAlchemy)
本章节主要介绍了python的orm框架的介绍以及作用,ORM框架的类型及运用方法,下面我们一起来看看吧! 一.面向对象应用场景: 1.函数有共同参数,解决参数不断重用: 2.模板(约束同一类事物的, ...
- ORM框架SQLAlchemy使用学习
参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...
最新文章
- 通用Logging框架设计
- Windows PE 第十三章 PE补丁技术
- ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法
- Spring Security——OAuth 2.0登录——Google,GitHub,Facebook和Okta
- 输入文件c语言程序,C语言程序设计 对文件的输入输出.ppt
- python安装方法3.8.2_Linux安装Python3.8.1的教程详解
- java 序列化工具kryo_java jackson avro kryo等几种序列化与反序列化工具的使用
- Redux 主要知识学习总结
- Ubuntu 16.04通过源码安装QUEM虚拟机
- 经纬度转换,度转度分秒,度分秒转为度,前端js
- 2020长安杯网站重构部分
- Android强制设置屏幕旋转方向 Force rotation
- html扑克牌展开,HTML5 canvas扑克牌花式洗牌动画
- 【读书摘抄】人类简史
- 蘑菇街面经(自己的第一次秋招面试)
- 平面设计学习需要会哪些知识
- Text to image论文精读GR-GAN:逐步细化文本到图像生成 GRADUAL REFINEMENT TEXT-TO-IMAGE GENERATION
- 射频电路板设计常见的问题分析和解决办法
- 官网稳定版微信小程序下载地址
- 再见了,MySQL之父!
热门文章
- C语言估算数学常量e,c语言常量的正确表示方法有哪些
- 网络营销外包——网络营销外包专员是怎样提升网站收录概率的?
- 网站SEO优化之如何提升访客量?
- docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...
- 石嘴山考计算机在哪里报名,石嘴山中考报名系统
- python global用法_14_手把手教你学Python之函数(下)
- 怎么共享电脑上的文件_电脑小技巧--远程访问共享文件夹
- LSTM如何解决梯度消失或爆炸的?
- RBF网络——核心思想:把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了...
- redis实现分布式锁——核心 setx+pipe watch监控key变化-事务