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 相关文章推荐
在Windows8上的搭建Python和Django环境
Jul 03 Python
详细探究Python中的字典容器
Apr 14 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
详解Python的Django框架中的模版继承
Jul 16 Python
python生成随机图形验证码详解
Nov 08 Python
python书籍信息爬虫实例
Mar 19 Python
python导入模块交叉引用的方法
Jan 19 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
python中tab键是什么意思
Jun 18 Python
Python面向对象特殊属性及方法解析
Sep 16 Python
pytorch学习教程之自定义数据集
Nov 10 Python
python regex库实例用法总结
Jan 03 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
PHP5中MVC结构学习
2006/10/09 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
探讨php中遍历二维数组的几种方法详解
2013/06/08 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
js使用for循环及if语句判断多个一样的name
2014/09/09 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
vue canvas绘制矩形并解决由clearRec带来的闪屏问题
2019/09/02 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Python获取央视节目单的实现代码
2015/07/25 Python
Python全局变量用法实例分析
2016/07/19 Python
Python 备份程序代码实现
2017/03/06 Python
python实现聚类算法原理
2018/02/12 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
通过Python模块filecmp 对文件比较的实现方法
2018/06/29 Python
python的time模块和datetime模块实例解析
2019/11/29 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
应用数学专业求职信
2014/03/14 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
小学优秀学生评语
2014/12/29 职场文书
《检阅》教学反思
2016/02/22 职场文书
演讲开头怎么书写?
2019/08/06 职场文书