python使用SQLAlchemy操作MySQL


Posted in Python onJanuary 02, 2020

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:46

from sqlalchemy.dialects.mysql import INTEGER, VARCHAR
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
Base = 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 = place

def 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表结构如下:

python使用SQLAlchemy操作MySQL

数据插入

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

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Sanya, Hainan
# time: 12:52

from create_table import Users
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

def 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()

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

python使用SQLAlchemy操作MySQL

数据查询

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

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Sanya, Hainan
# time: 12:52

from create_table import Users
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

def 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:52

from create_table import Users
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

def 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()

更新后的表格数据如下:

python使用SQLAlchemy操作MySQL

数据删除

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

# -*- coding: utf-8 -*-
# author: Jclian91
# place: Sanya, Hainan
# time: 12:52

from create_table import Users
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

def 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()

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

python使用SQLAlchemy操作MySQL

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

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

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

Python 相关文章推荐
Python操作串口的方法
Jun 17 Python
Python 多线程的实例详解
Sep 07 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
名片管理系统python版
Jan 11 Python
Python numpy 点数组去重的实例
Apr 18 Python
Django框架验证码用法实例分析
May 10 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
解决Python spyder显示不全df列和行的问题
Apr 20 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
Aug 17 Python
Django用户认证系统如何实现自定义
Nov 12 Python
Python通过Schema实现数据验证方式
Nov 12 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 #Python
Matplotlib scatter绘制散点图的方法实现
Jan 02 #Python
Python基础之函数基本用法与进阶详解
Jan 02 #Python
Python面向对象原理与基础语法详解
Jan 02 #Python
Pytorch 的损失函数Loss function使用详解
Jan 02 #Python
Python面向对象封装操作案例详解 II
Jan 02 #Python
Python实现搜索算法的实例代码
Jan 02 #Python
You might like
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
认识并使用PHP超级全局变量
2010/01/26 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
基于JQuery 滑动与动画的说明介绍
2013/04/18 Javascript
JavaScript访问字符串中单个字符的两种方法
2015/07/03 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
Vue中对拿到的数据进行A-Z排序的实例
2018/09/25 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
js实现网页随机验证码
2020/10/19 Javascript
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
教你用Type Hint提高Python程序开发效率
2016/08/08 Python
TensorFlow数据输入的方法示例
2018/06/19 Python
python并发和异步编程实例
2018/11/15 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
python Django的web开发实例(入门)
2019/07/31 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签
2019/12/04 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
3种适用于Python的疯狂秘密武器及原因解析
2020/04/29 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
django美化后台django-suit的安装配置操作
2020/07/12 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
外科实习自我鉴定
2013/10/06 职场文书
毕业生的求职信范文分享
2013/12/04 职场文书
英语简历自我评价
2014/01/26 职场文书
2016年父亲节寄语
2015/12/04 职场文书