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 相关文章推荐
在Mac OS上搭建Python的开发环境
Dec 24 Python
教大家玩转Python字符串处理的七种技巧
Mar 31 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
Django 5种类型Session使用方法解析
Apr 29 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
python3中数组逆序输出方法
Dec 01 Python
Django后端按照日期查询的方法教程
Feb 28 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
PHP 反向排序和随机排序代码
2010/06/30 PHP
将php数组输出html表格的方法
2014/02/24 PHP
CodeIgniter钩子用法实例详解
2016/01/20 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
PHP钩子实现方法解析
2019/05/21 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
jquery实现背景墙聚光灯效果示例分享
2014/03/02 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
2015/01/09 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
python 字符串只保留汉字的方法
2018/11/16 Python
基于python的Paxos算法实现
2019/07/03 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
html5简介及新增功能介绍
2020/05/18 HTML / CSS
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
中专生毕业个人鉴定
2014/02/26 职场文书
《新型玻璃》教学反思
2014/04/13 职场文书
安全生产承诺书范文
2014/05/22 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
导游词之西安骊山
2019/12/03 职场文书