Python 学习(七)--数据库操作

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 1. MySQL 数据库连接1). PyMySQLPyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

1. MySQL 数据库连接

1). PyMySQL
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
下载解压,如图:

img_ee9a9889eff833cdae58221002969d35.png
图1.png

2). 安装

python setup.py install
img_077ad68c5b0eef9c7e10de0bf934ab9c.png
图2.png

2. 数据库连接

连接数据库前,请先确认以下事项:

  • 已经创建了数据库 TESTDB.
  • 在TESTDB数据库中您已经创建了表 EMPLOYEE
  • EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。
  • 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。
  • 在你的机子上已经安装了 Python MySQLdb 模块。
import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用 cursor() 方法创建游标对象 cursor
cursor = db.cursor()
# 使用execute() 方法执行SQL查询
cursor.execute("SELECT VERSION()")
# 使用fetchone() 方法获取单条数据
data = cursor.fetchone()
# 打印数据库版本
print("Database version: %s" % data)
# 关闭数据库连接
db.close()

打印结果:


img_acf005974b6479c92537b272bcf5100d.png
图3.png

3. 创建数据库表

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost", "root", "root", "TEST")
# 使用cursor() 方法创建一个游标cursor
cursor = db.cursor()
# 使用execute()方法执行SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# 使用预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
        FIRST_NAME CHAR(20) NOT NULL,
        LAST_NAME CHAR(20),
        AGE INT,
        SEX CHAR(1),
        INCOME FLOAT)"""
# 执行sql语句
cursor.execute(sql)
# 关闭数据库连接

打印结果:


img_9b7b57dd6fab3b2bfea140e71998d9de.png
图4.png

4. 数据插入

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost", "root", "root", "TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
        LAST_NAME,AGE,SEX,INCOME) VALUES
        ('Mac','Mohan',20,'M',2000)"""
try:
    # 执行sql语句
    cursor.execute(sql)
    # 添加事务到数据库
    db.commit()
except:
    # 如果发生错误则回滚
    db.rollback()
# 关闭数据库连接
db.close()

打印结果:


img_227587d7b701938a21bcb093e94dc808.png
图5.png

5. 数据查询

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall(): 接收全部的返回结果行.
  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 查询语句
sql = "SELECT * FROM EMPLOYEE \
        WHERE INCOME > '%d'" % (1000)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 获取说有记录列表
    results = cursor.fetchall()
    for row in results:
        fname = row[0]
        lname = row[1]
        age = row[2]
        sex = row[3]
        income = row[4]
        # 打印结果
        print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
            (fname, lname, age, sex, income))
        pass
    pass
except Exception as e:
    print("Error: unable to fetch data")
    raise e

# 关闭数据库连接
db.close()

打印结果:


img_76f7862119936a64b42923ed52109e67.png
图6.png

6. 数据更新

import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    db.commit()
    pass
except Exception as e:
    # 发生错误时回滚
    db.rollback()
    raise e
# 关闭数据库连接
db.close()

打印结果:


img_6f0896851f16528c4193afb945cfbe72.png
图7.png

7. 数据删除

import pymysql
# 打开数据库连接
db = pymysql.connect("localhost","root","root","TEST")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# sql 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
    # 执行sql语句
    cursor.execute(sql)
    # 提交修改
    db.commit()
    pass
except Exception as e:
    # 发生错误时回滚
    db.rollback()
    raise e
# 关闭连接
db.close()

打印结果:


img_3ab1679559148d5094c2215289d8a187.png
图8.png

8. 事务执行事务

事务机制可以确保数据一致性。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

  • 原子性(atomicity) : 一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency) : 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(isolation) : 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability) : 持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
    Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
Python
python函数的参数学习
学习Python函数参数涉及五个方面:1) 位置参数按顺序传递,如`func(1, 2, 3)`;2) 关键字参数通过名称传值,如`func(a=1, b=2, c=3)`;3) 默认参数设定默认值,如`func(a, b, c=0)`;4) 可变参数用*和**接收任意数量的位置和关键字参数,如`func(1, 2, 3, a=4, b=5, c=6)`;5) 参数组合结合不同类型的参数,如`func(1, 2, 3, a=4, b=5, c=6)`。
14 1
|
8天前
|
Python
python学习3-选择结构、bool值、pass语句
python学习3-选择结构、bool值、pass语句
|
4天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
31 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答
|
4天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
6天前
|
机器学习/深度学习 算法 Python
使用Python实现集成学习算法:Bagging与Boosting
使用Python实现集成学习算法:Bagging与Boosting
17 0
|
7天前
|
Python
python学习-函数模块,数据结构,字符串和列表(下)
python学习-函数模块,数据结构,字符串和列表
46 0
|
8天前
|
Python
python学习14-模块与包
python学习14-模块与包
|
8天前
|
Python
python学习12-类对象和实例对象
python学习12-类对象和实例对象
|
8天前
|
数据采集 Python
python学习9-字符串
python学习9-字符串
|
8天前
|
Python
python学习10-函数
python学习10-函数