在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相关推荐

  1. ORM框架SQLAlchemy学习笔记

    ORM框架SQLAlchemy 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之 ...

  2. python安装orm_Python流行ORM框架sqlalchemy安装与使用教程

    本文实例讲述了Python流行ORM框架sqlalchemy安装与使用.分享给大家供大家参考,具体如下: 安装 1.安装 #进入虚拟环境 #执行 ./python3 -m pip install im ...

  3. Python与数据库[2] - 关系对象映射/ORM[4] - sqlalchemy 的显式 ORM 访问方式

    sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...

  4. 27.Python数据库操作(一)【内置数据库SQLite和ORM框架SQLAlchemy】

    目录: 每篇前言: Python数据库操作(一) 1.1 SQLite 1.2 ORM框架SQLAlchemy 每篇前言:

  5. Python与数据库[2] - 关系对象映射/ORM[1] - sqlalchemy 的基本使用示例

    sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: 1 ...

  6. DAY11-MYSQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  7. sqlalchemy exists 子查询_学好ORM框架SQLAlchemy面试必问

    首先我们先来了解一下SQLAlchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然 ...

  8. eric python mysql,python入门教程13-07 (python语法入门之ORM框架SQLAlchemy)

    本章节主要介绍了python的orm框架的介绍以及作用,ORM框架的类型及运用方法,下面我们一起来看看吧! 一.面向对象应用场景: 1.函数有共同参数,解决参数不断重用: 2.模板(约束同一类事物的, ...

  9. ORM框架SQLAlchemy使用学习

    参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...

最新文章

  1. 通用Logging框架设计
  2. Windows PE 第十三章 PE补丁技术
  3. ajax使用json下拉框,ajax请求后台得到json数据后动态生成树形下拉框的方法
  4. Spring Security——OAuth 2.0登录——Google,GitHub,Facebook和Okta
  5. 输入文件c语言程序,C语言程序设计 对文件的输入输出.ppt
  6. python安装方法3.8.2_Linux安装Python3.8.1的教程详解
  7. java 序列化工具kryo_java jackson avro kryo等几种序列化与反序列化工具的使用
  8. Redux 主要知识学习总结
  9. Ubuntu 16.04通过源码安装QUEM虚拟机
  10. 经纬度转换,度转度分秒,度分秒转为度,前端js
  11. 2020长安杯网站重构部分
  12. Android强制设置屏幕旋转方向 Force rotation
  13. html扑克牌展开,HTML5 canvas扑克牌花式洗牌动画
  14. 【读书摘抄】人类简史
  15. 蘑菇街面经(自己的第一次秋招面试)
  16. 平面设计学习需要会哪些知识
  17. Text to image论文精读GR-GAN:逐步细化文本到图像生成 GRADUAL REFINEMENT TEXT-TO-IMAGE GENERATION
  18. 射频电路板设计常见的问题分析和解决办法
  19. 官网稳定版微信小程序下载地址
  20. 再见了,MySQL之父!

热门文章

  1. C语言估算数学常量e,c语言常量的正确表示方法有哪些
  2. 网络营销外包——网络营销外包专员是怎样提升网站收录概率的?
  3. 网站SEO优化之如何提升访客量?
  4. docker omv 防火墙_我的软路由折腾之旅 篇三:在openmediavault上通过Docker实现OPENWRT旁路由功能...
  5. 石嘴山考计算机在哪里报名,石嘴山中考报名系统
  6. python global用法_14_手把手教你学Python之函数(下)
  7. 怎么共享电脑上的文件_电脑小技巧--远程访问共享文件夹
  8. LSTM如何解决梯度消失或爆炸的?
  9. RBF网络——核心思想:把向量从低维m映射到高维P,低维线性不可分的情况到高维就线性可分了...
  10. redis实现分布式锁——核心 setx+pipe watch监控key变化-事务