ORM 和 SQLAlchemy 操作使用数据库
ORM 框架
介绍
全称 Object Relational Mapping, 翻译过来叫 对象关系映射 。
简单的说,ORM将数据库中的表与面向对象语言中的类建立了一种对应关系。
这样,我们要操作数据库,数据库中的表或者表中的一条记录就可以直接通过操作类或者类实例来完成。
SQLAlchemy
1.介绍
SQLAlchemy是Python 社区最知名的 ORM 工具之一,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型
SQLAlchemy 实际上就是利用 Python 来构建表示关系型数据库结构和表达式的系统
使用起来类似于我们在下层的数据库中直接使用 SQL 表达式一样,但实际上它为不同数据库实现的差异提供了一层抽象。
2.特点
- SQLALchemy是对数据库操作的封装,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升
- SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作
3. 安装SQLAlchemy
3.1 安装命令
pip install sqlalchemy
4.SQLAlchemy操作数据库
4.1 创建数据库
create database ceshi charset=utf8;
4.2 SQLAlchemy连接数据库
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://用户名:密码@ip地址:3306/ceshi?charset=utf8'')
print(engine)
4.3 使用ORM框架原理 以类的形式来创建数据表
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer链接是需要指定要用到的MySQL数据库
engine = create_engine('mysql+pymysql://root:python@localhost:3306/ceshi?charset=utf8', echo=True)
Base = declarative_base() # 生成SQLORM基类class User(Base):# 对应MySQL中数据表的名字__tablename__ = 'users'# 创建字段id = Column(Integer, primary_key=True) # users表中的id字段(主键)username = Column(String(64), nullable=False, index=True) # users表中的username字段password = Column(String(64), nullable=False) # users表中的password字段email = Column(String(64), nullable=False, index=True) # users表中的email字段(有索引)def __repr__(self):return '%s(%r)' % (self.__class__.__name__, self.username)# 执行下面的代码,会创建users表(所有表结构)
Base.metadata.create_all(engine)
SQLAlchemy操作数据库(增删改查)
- 插入
- 插入一条数据
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
# 创建新User对象
new_user = User(id='1', username='python-teacher', password="123456", email="dong4716138@163.com")
# new_user = User(username='python-teacher', password="123456", email="dong4716138@163.com")
# 添加到session
session.add(new_user)
# 提交即保存到数据库
session.commit()
# 关闭session
session.close()
- 插入多条数据
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
new_user1 = User(username='python-teacher2', password="112233", email="laoyan@163.com")
new_user2 = User(username='python-teacher3', password="654321", email="laoma@163.com")
new_user3 = User(username='python-teacher4', password="789012", email="laoye@163.com")
session.add_all([new_user1, new_user2, new_user3])
session.commit()
session.close()
- 查询
1.查询所有数据
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
# 获取所有数据
obj = session.query(User).all()
# print(type(obj)) # 查询出来的类型是 <class 'list'>
# 说明:
# obj查询出来的是一个列表,其中数据为 User类的实例对象
for temp in obj:print("-" * 20)# print(temp) # 此时temp为User类的实例对象# print(type(temp)) # 类型是 <class '__main__.User'>print(temp.id)print(temp.username)print(temp.password)print(temp.email)
session.close()
- 条件查询
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例# 获取指定数据
obj = session.query(User).filter(User.id == 1).one()
print(obj.id)
print(obj.username)
print(obj.password)
print(obj.email)print("-" * 20)obj = session.query(User).filter(User.id == 4).one()
print(obj.id)
print(obj.username)
print(obj.password)
print(obj.email)session.close()
- 查询第一个数据
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
# 获取返回数据的第一行
obj = session.query(User).first()
print(obj.id)
print(obj.username)
print(obj.password)
print(obj.email)
session.close()
- 根据条件查询指定字段
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例# 查询ID>1的所有名字
obj = session.query(User.username).filter(User.id > 1).all()
# print(type(obj)) # 类型是 <class '__main__.User'>
for temp in obj:# print(temp.id) # 不能查询,因为在上面的查询中指定了是username字段,而没有指定其他的print(temp.username)
# print(temp.password) # 不能查询,因为在上面的查询中指定了是username字段,而没有指定其他的
# print(temp.email) # 不能查询,因为在上面的查询中指定了是username字段,而没有指定其他的session.close()
- 修改
1.方式一
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例# 按照条件修改,返回修改的条数
user = session.query(User).filter(User.username == "python-teacher").one()
user.username = 'laowang'
session.commit()session.close()
2.方式二
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
user = session.query(User).filter(User.username == "laowang").update({"username": "new-laowang"})
session.commit()
session.close()
- 删除
DBSession = sessionmaker(bind=engine) # 创建与数据库的会话,返回的是一个类
# 创建session对象
session = DBSession() # 生成链接数据库的实例
# 查处需要删除的对象
obj = session.query(User).filter(User.id == 6).one() # 第二次执行会失败,因为已经被删除了所以没有查询到数据
# obj = session.query(User).filter(User.id >= 6).all() # 不能对查询的列表使用delete删除
# 删除对象
session.delete(obj)
# 提交结果
session.commit()
session.close()
ORM 和 SQLAlchemy 操作使用数据库相关推荐
- 【tips】ORM - SQLAlchemy操作MySQL数据库
优先(官方文档SQLAlchemy-version1.2): sqlalchemy | 作者:斯芬克斯 推荐一(长篇幅version1.2.0b3):python约会之ORM-sqlalchemy | ...
- FastAPI 结合 SQLAlchemy 操作 MySQL 数据库
文章目录 1. 安装 SQLAlchemy 2. 创建数据库 3. SQLAlchemy 连接 MySQL 4. 创建数据模型 5. 创建 Pydantic 模型 6. crud 工具 7. main ...
- 27.Python数据库操作(一)【内置数据库SQLite和ORM框架SQLAlchemy】
目录: 每篇前言: Python数据库操作(一) 1.1 SQLite 1.2 ORM框架SQLAlchemy 每篇前言:
- sqlalchemy 使用mysql_使用SQLALchemy连接MySql数据库并进行操作
"导语:这期主要学一下利用SQLALchemy连接MySql数据库以及对数据库的增删改查的操作,可能代码部分很多还不能理解,我觉得像一些固定写法先用着(比如引入的类等),再慢慢体会缘由&qu ...
- 根据数据库表gengxin实体类_Python学习第四十八天记录打call:SQLALchemy操作MySQL关系型数据库...
1.SQLALchemy使用 安装 pip install sqlalchemy: SQLAlchemy是Python编程语言下的一款开源软件,是PythonSQL工具包和对象关系映射器,它为应用程序 ...
- pymsql 与 SQLAlchemy 操作数据库的区别
pymsql 与 SQLAlchemy 操作数据库的区别 pymsql 1.是获得连接对象 2.是获取连接对象 SQLAlchemy 1.是数据库连接配置 2.是通过配置创建引擎 3.是通过引擎创建数 ...
- SQLAlchemy 操作数据库
SQLAlchemy 操作数据库 SQLAlchemy为Python提供了不同数据库的统一接口,采用ORM的方式操作数据库,简洁优雅 一.安装 直接通过pip安装即可 pip install sqla ...
- Python与数据库[2] - 关系对象映射/ORM[4] - sqlalchemy 的显式 ORM 访问方式
sqlalchemy 的显式 ORM 访问方式 对于sqlalchemy,可以利用一种显式的ORM方式进行访问,这种方式无需依赖声明层,而是显式地进行操作.还有一种访问方式为声明层 ORM 访问方式. ...
- Python与数据库[2] - 关系对象映射/ORM[1] - sqlalchemy 的基本使用示例
sqlalchemy 的基本使用示例 下面的例子中将利用sqlalchemy进行数据库的连接,通过orm方式利用类实例属性操作的方式对数据库进行相应操作,同时应用一些常用的函数. 完整代码如下: 1 ...
- python 笔记 之 sqlalchemy操作数据库-创建表
2019独角兽企业重金招聘Python工程师标准>>> ''' pip install SQLAlchemy 操作数据库-创建表 ''' import sqlalchemy''' s ...
最新文章
- 人脑是怎么防止梯度消失和梯度爆炸的?
- Know more about CBO Index Cost
- 聊一聊对外API接口的存活检查可以怎么做
- java pattern堆栈溢出_我的正则表达式导致Java中的堆栈溢出;我错过了什么?
- 【转载】Altera官方资料整理
- JUnit 4 超详细教程(一)
- APDU应用协议数据单元
- Linux下安装字体后刷新字体
- matlab语言fcm,【上海校区】FCM算法原理及MATLAB实现
- 蜀门 - 青城加点完美攻略
- 迷时师度 悟了自度
- ng-content、ng-template、ng-container使用及区别
- 机电revit的【桥架转化】功能,识别CAD图纸点击转化
- 微信跑腿小程序怎么做
- 金融之期货软件搭建,股票平台搭建,融资融券平台搭建
- pytorch学习笔记(八):PytTorch可视化工具 visdom
- Unix 操作系统背后的女程序员 Lorinda Cherry 去世,享年 78 岁
- 推荐下加拿大使用的虚拟信用卡
- 写作软件评测iA Writer、Ulysses、Effie、Typora、Writeathon、Bear
- 阿里云张献涛:云原生计算基础设施助力汽车行业数字化升级
热门文章
- TensorFlow深度学习入门(9)——常用函数说明
- 版本管理+微建站+头条号接入-Zoomla!逐浪CMS2 x3.9.0发布
- Saas给企业带来的益处
- Unity 清理掉项目中垃圾文件——UnityAssetCleaner
- PAT 乙级 1072 开学寄语(20 分)
- case语句 oracle,Oracle的Case语句
- 销售管理全面指南:职能、流程、目标和工具
- python适合做网站吗_python做网站有什么弊端文章伪原创的注意事项
- 数据结构 DAY02 时间复杂度和空间复杂度分析
- 树莓派python蓝牙_Raspberry pi 蓝牙音响播放