使用Python操作MySQL数据库

本篇为使用python连接并操作MySQL数据库,涉及PyMySql模块。

安装PyMySql模块

方法一:

pip3 install pymsql

方法二:

点击pycharm/settings/Project Iterpreter右侧的加号,搜索pymysql然后点击 Install Package

PyMySql模块

简介

PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存储过程、批量执行等。

基本使用

连接MySQL

1
conn = pymysql.Connection(host='127.0.0.1', user='root',password='2296',database ='test',charset='utf8')

获取游标

1
cursor = connection.cursor()

执行SQL

1
2
cursor.execute(sql, args) 执行单条 SQL
cursor.executemany(sql, args) 批量执行 SQL

补充:

  1. INSERT、UPDATE、DELETE 等修改数据的语句需手动执行connection.commit()完成对数据修改的提交。
  2. 对于大段文字(包含单引号、双引号等特殊符号),我们将它放在args 中,而不是直接手动拼接在SQL语句中。

简单的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql

conn = pymysql.Connection(host='127.0.0.1', user='root',password='2296',database ='test',charset='utf8')
cur = conn.cursor() # 游标 数据库操作符
# sql = 'select %s,%s from employee' # 只有值能拼接,不能拼字段名
sql = 'select emp_name,salary from employee' # 只有值能拼接,不能拼字段名
# cur.execute(sql,('emp_name','salary'))
cur.execute(sql)
ret1 = cur.fetchone()
ret2 = cur.fetchmany(2)
ret3 = cur.fetchall()
print(ret1)
print(ret2)
print(ret3)
# 插入

sql = 'insert into employee(id, emp_name, sex, age, hire_date) values(%s,%s,%s,%s,%s )'
cur.execute(sql,(20,'小小','male',88,20181218)) # 传可迭代对象
conn.commit() # 只要修改就得用它,不然保存不到硬盘上
cur.close()
conn.close()

创建表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost",user="testuser",password="pw",database ='test',charset='utf8')

# 使用 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 )"""

cursor.execute(sql)

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

操作数据

插入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost",user="testuser",password="pw",database ='test',charset='utf8')


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

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES (%s, %s, %s, %s, %s)"""
try:
# 执行sql语句
cursor.execute(sql,('Mac', 'Mohan', 20, 'M', 2000))
# 提交到数据库执行
db.commit()
except:
# 如果发生错误则回滚
db.rollback()

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

建议:将变量传给 args ,而不是手动拼接!

查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 执行查询 SQL
cursor.execute('SELECT * FROM tables')

# 获取单条数据
cursor.fetchone()

# 获取前N条数据
cursor.fetchmany(3)

# 获取所有数据
cursor.fetchall()

# 这是一个只读属性,并返回执行execute()方法后影响的行数。
rowcount

更新

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost",user="testuser",password="pw",database ='test',charset='utf8')

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

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
# 发生错误时回滚
db.rollback()

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

删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost",user="testuser",password="pw",database ='test',charset='utf8')

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

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

# 关闭连接
db.close()

执行事务

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

  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
  • 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
  • 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
1
2
3
4
5
6
7
8
9
10
# 删除年龄大于20的人
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
# 执行SQL语句
cursor.execute(sql)
# 向数据库提交
db.commit()
except:
# 发生错误时回滚
db.rollback()

SQLhelper

  • 将原生sql封装起来
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import pymysql

from DBUtils.PooledDB import PooledDB

class SQLHelper(object):
def __init__(self):
# 创建数据库连接池
self.pool = PooledDB(
creator=pymysql,
maxconnections=5,
mincached=2,
blocking=True,
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='s23day02',
charset='utf8'
)


def connect(self):
conn = self.pool.connection()
cursor = conn.cursor()
return conn,cursor


def disconnect(self,conn,cursor):
cursor.close()
conn.close()


def fetchone(self,sql,params=None):
"""
获取单条
:param sql:
:param params:
:return:
"""
if not params:
params = []
conn,cursor = self.connect()
cursor.execute(sql, params)
result = cursor.fetchone()
self.disconnect(conn,cursor)
return result


def fetchall(self,sql,params=None):
"""
获取所有
:param sql:
:param params:
:return:
"""
import pymysql
if not params:
params = []
conn, cursor = self.connect()
cursor.execute(sql,params)
result = cursor.fetchall()
self.disconnect(conn, cursor)
return result


def commit(self,sql,params):
"""
增删改
:param sql:
:param params:
:return:
"""
import pymysql
if not params:
params = []

conn, cursor = self.connect()
cursor.execute(sql, params)
conn.commit()
self.disconnect(conn, cursor)


db = SQLHelper()
-------------The End-------------

本文标题:使用Python操作MySQL数据库

文章作者:Naqin

发布时间:2019年05月28日 - 14:05

最后更新:2019年12月22日 - 16:12

原始链接:https://chennq.top/MySQL学习/20190528-Python_MySQL.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Naqin wechat
欢迎看官加我微信!
坚持原创技术分享,您的支持将鼓励我继续创作!
0%