侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python使用SQLAlchemy操作MySQL

Python  /  管理员 发布于 7年前   389

SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。

本文将介绍如何使用SQLAlchemy操作MySQL,完成基础的表创建,表格数据的新增、查询、修改、删除(CRUD)等操作。

首先我们需要确认当前的Python环境下已经安装sqlalchemy和pymysql模块。

新建表格

我们使用本地的MySQL数据库,数据库为orm_test。新建一张users表,字段为id,name,age,place。完整的Python代码(create_table.py)如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Sanya, Hainan# time: 12:46from sqlalchemy.dialects.mysql import INTEGER, VARCHARfrom sqlalchemy import Columnfrom sqlalchemy import create_enginefrom sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()# users表结构class Users(Base):  __tablename__ = 'users'  id = Column(INTEGER, primary_key=True)  name = Column(VARCHAR(256), nullable=False)  age = Column(INTEGER)  place = Column(VARCHAR(256), nullable=False)  def __init__(self, id, name, age, place):    self.id = id    self.name = name    self.age = age    self.place = placedef init_db():  engine = create_engine(    "mysql+pymysql://root:@localhost:3306/orm_test",    encoding= "utf-8",    echo=True  )  Base.metadata.create_all(engine)  print('Create table successfully!')if __name__ == '__main__':  init_db()

运行后,生成的users表结构如下:

数据插入

接着我们插入几条测试数据,完整的代码(db_insert.py)如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Sanya, Hainan# time: 12:52from create_table import Usersfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerdef insert_data():  # 初始化数据库连接  engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")  # 创建DBSession类型  DBSession = sessionmaker(bind=engine)  # 创建session对象  session = DBSession()  # 插入单条数据  # 创建新User对象  new_user = Users(id=1, name='Jack', age=25, place='USA')  # 添加到session  session.add(new_user)  # 提交即保存到数据库  session.commit()  # 插入多条数据  user_list= [Users(id=2, name='Green', age=26, place='UK'),        Users(id=3, name='Alex', age=31, place='GER'),        Users(id=4, name='Chen', age=52, place='CHN'),        Users(id=5, name='Zhang', age=42, place='CHN')        ]  session.add_all(user_list)  session.commit()  # 关闭session  session.close()  print('insert into db successfully!')if __name__ == '__main__':  insert_data()

运行程序后,表格中的数据如下:

数据查询

接下来演示如何进行简单的查询。我们需要查询place为CHN的人名,完整的Python代码(db_query)如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Sanya, Hainan# time: 12:52from create_table import Usersfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerdef query_data():  # 初始化数据库连接  engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")  # 创建DBSession类型  DBSession = sessionmaker(bind=engine)  # 创建session对象  session = DBSession()  # 查询所有place是CHN的人名  # 创建Query查询,filter是where条件  # 调用one()返回唯一行,如果调用all()则返回所有行:  users = session.query(Users).filter(Users.place == 'CHN').all()  print([use.name for use in users])  # 输出:['Chen', 'Zhang']  # 或者用如下查询  users = session.query(Users.name).filter(Users.place == 'CHN').all()  print(users)  # 输出:[('Chen',), ('Zhang',)]  session.close()if __name__ == '__main__':  query_data()

输出结果如下:

['Chen', 'Zhang']
[('Chen',), ('Zhang',)]

数据更新

接下来我们演示数据更新。我们需要将Jack的place修改为CHN,完整的Python代码(db_update)如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Sanya, Hainan# time: 12:52from create_table import Usersfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerdef update_data():  # 初始化数据库连接  engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")  # 创建DBSession类型  DBSession = sessionmaker(bind=engine)  # 创建session对象  session = DBSession()  # 数据更新,将Jack的place修改为CHN  update_obj = session.query(Users).filter(Users.name=='Jack').update({"place":"CHN"})  session.commit()  session.close()  print("Update data successfully!")if __name__ == '__main__':  update_data()

更新后的表格数据如下:

数据删除

接着我们演示数据删除。我们需要将Jack的记录删除,完整的Python代码(db_delete.py)如下:

# -*- coding: utf-8 -*-# author: Jclian91# place: Sanya, Hainan# time: 12:52from create_table import Usersfrom sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerdef delete_data():  # 初始化数据库连接  engine = create_engine("mysql+pymysql://root:@localhost:3306/orm_test", encoding="utf-8")  # 创建DBSession类型  DBSession = sessionmaker(bind=engine)  # 创建session对象  session = DBSession()  # 数据更新,将Jack的记录删除  update_obj = session.query(Users).filter(Users.name=='Jack').delete()  session.commit()  session.close()  print("Delete data successfully!")if __name__ == '__main__':  delete_data()

运行程序后,表格中的数据如下:

本次分享到此结束,感谢大家阅读~

本文的示例代码已经上传至Github,网址为:https://github.com/percent4/ORM_test。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python使用正则表达式(Regular Expression)方法超详细
    下一条:
    Python基础之函数基本用法与进阶详解
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客