相关文章:
(最全、最新)查看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.
欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!