python操作mysql数据库(详解2)

相关文章:
(最全、最新)查看python安装、路径以及pip安装的包列表及路径、查看Python所有虚拟环境
python操作mysql数据库(详解1)
python批量爬取古诗词并保存之Excel或数据库mysql
Python提取MySQL数据,并批量保存到Excel文件,生成报表
Python半分钟内处理分析128张Excel表格,是种怎么样的体验
Python提取MySQL数据,并批量保存到Excel文件,生成报表
(一)SQL基础三步曲(初级进阶)
(二)SQL基础三步曲(初级进阶)

续上一篇 python操作mysql数据库(详解2)

python操作mysql数据库(详解1).
当然也可以使用 git 命令下载安装包安装(你也可以手动下载):

1 git clone https://github.com/PyMySQL/PyMySQL
2 cd PyMySQL/
3 python3 setup.py install

六、数据库连接

连接数据库前,是否已经创建了数据库和表,这个很重要。都是一步一步来的。
1、查看有没有创建数据库

show databases;

在这里插入图片描述
没有那个数据库,那我们就开始创建一个TESTDB数据库
代码如下(示例):

create database TESTDB;

2、查看TESTDB数据库里,有没有测试表

1 use testdb;
2 show tables;

在这里插入图片描述

七、创建一个实例

参考代码:

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
# 3.导入模块
import pymysql
 
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法创建一个游标对象
cursor = conn.cursor()
 
# 使用execute()方法执行SQL查询
cursor.execute('SELECT VERSION()')

# 使用fetchone()方法获取单条数据
data = cursor.fetchone()

# 打印
print('database version: %s' % data)

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

八、创建数据库、表(增删改查)

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

# 3.导入模块
import pymysql

import pymysql

# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法创建一个游标对象cursor
cursor = conn.cursor()  # 游标对象用于执行查询和获取结果

# 使用execute()方法执行SQL,如果表存在则将其删除
cursor.execute('DROP TABLE IF EXISTS EMPLOYEE')

# 使用预处理语句创建表
sql = """CREATE TABLE `employee` (
   `first_name` varchar(255) DEFAULT NULL COMMENT '姓',
   `last_name` varchar(255) DEFAULT NULL COMMENT '名',
   `age` int(11) DEFAULT NULL COMMENT '年龄',
   `sex` varchar(255) DEFAULT NULL COMMENT '性别',
   `income` varchar(255) DEFAULT NULL COMMENT '收入'
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""

# 执行SQL语句
cursor.execute(sql)

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

1.数据库插入操作
执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
先查询有没有记录输入查询语句,结果为空再进行下一步

select * from employee;

在这里插入图片描述

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

# 3.导入模块
import pymysql

import pymysql

# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法获取操作游标
cursor = conn.cursor()

# SQL语句:向数据表中插入数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""

# 异常处理
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交事务到数据库执行
    conn.commit()  # 事务是访问和更新数据库的一个程序执行单元
except:
    # 如果发生错误则执行回滚操作
    conn.rollback()

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

另一种写法,也可以:

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。

# 3.导入模块
import pymysql

import pymysql

# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法获取操作游标
cursor = conn.cursor()

# SQL语句:向数据表中插入数据
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s',  %s,  '%s',  %s)" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
# 异常处理
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交事务到数据库执行
    conn.commit()  # 事务是访问和更新数据库的一个程序执行单元
except:
    # 如果发生错误则执行回滚操作
    conn.rollback()

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

再次查看有没有记录,输入第一步的sql语句:(可以看到插入一条记录)
在这里插入图片描述
数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall():接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
# 3.导入模块
import pymysql

import pymysql

# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法获取操作游标
cursor = conn.cursor()

# SQL语句:查询
sql = "SELECT * FROM employee WHERE income > 1000 "

# 异常处理
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 获取所有的记录列表
    results = cursor.fetchall()
    # 遍历列表
    for row in results:
        # 打印列表元素
        print(row)
        # 姓
        first_name = row[0]
        # 名
        last_name = row[1]
        # 年龄
        age = row[2]
        # 性别
        sex = row[3]
        # 收入
        income = row[4]
        # 打印列表元素
        print(first_name, last_name, age, sex, income)
except:
    print('Uable to fetch data!')

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

数据库更新操作
更新操作用于更新数据表的的数据,以下实例将 EMPLOYEE 表中的 SEX 字段为 ‘M’ 的 AGE 字段递增 5:
1、以前age是20
在这里插入图片描述

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
# 3.导入模块
import pymysql
import pymysql
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# SQL语句,执行更新操作
sql = 'UPDATE employee SET age = age + 5 WHERE sex = "M"'
# 异常处理
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    conn.commit()
except:
    # 发生错误时回滚
    conn.rollback()
# 关闭数据库连接
conn.close()

执行查询程序后,查询age变更到25了
在这里插入图片描述
删除操作

# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行

# 2.注释:包括记录创建时间,创建人,项目名称。
# 3.导入模块
import pymysql

import pymysql

# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')

# 使用cursor()方法获取操作游标
cursor = conn.cursor()

# SQL语句,执行删除操作
sql = 'DELETE FROM employee WHERE age >20'

# 异常处理
try:
    # 执行SQL语句
    cursor.execute(sql)
    # 提交到数据库执行
    conn.commit()
except:
    # 发生错误时回滚
    conn.rollback()

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

九、执行事务

事务机制可以确保数据一致性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

十、常见错误类型

在这里插入图片描述
本文参考文章:
北京-宏哥:https://www.cnblogs.com/du-hong/p/10897822.html.
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值