Python操作MySQL

在学习的过程中总免不了需要使用大量的数据。而这些数据一般都存在数据库中,当需要使用的时候就可以通过连接数据库进行增删改查等操作。

而数据库又可以分为关系型数据库和非关系型数据库。关系型数据库中常见的有mysql,oracle等。非关系型数据库有MongoDB等。相信在学习爬虫的过程中对MongoDB的基本使用都已经了解了。那今天看一下mysql的基本使用方法。

python与mysql的桥梁

python是非常不错的"两门语言",所以在py2和py3中使用的连接mysql的模块有点变化;py2中一般使用MySqldb来调用Mysql,但是在py3中不支持该包,则使用pymysql来代替了。

现在python的版本都到3.7了,所以还是老老实实的使用pymysql吧。安装pymysql非常简单,只需要pip一下就可以了

pymysql的简单操作

数据库的连接,基本操作增删改查,还有事务处理的能力可以说是程序员的基本功。所以从这几个方面入手,了解一下pymysql。

1.连接

连接非常简单只需要使用pymysql的connect方法就可以了。

例如:

import pymysql

connection = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123456',
    database='test',
    charset='utf8')

host为数据库的主机IP地址,port为MySQL的默认端口号,user为数据的用户名,password为数据库的登录密码,db为数据库的名称。
注意:charset="utf8",中间没有空格,因为mySql不支持

看到没有password=‘123456’,这就是前段时间华住脱库的元凶。当然我们只是在本机测试,123456就123456吧,谁叫它简单又好记呢。

2.MySQL的游标

在开始操作mysql之前,先介绍一下MySQL的游标(cursor)。它是mysql中一个重要的概念,它有几个特性:

  1. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想,用来存放SQL语句执行的结果。
  2. 有数据基础:游标是在先从数据表中检索出数据之后才能继续灵活操作的技术。
  3. 类似于指针:游标类似于指向数据结构堆栈中的指针,用来pop出所指向的数据,并且只能每次取一个。

上面看读懂没关系。总的来说,想要操作数据库,就先要拿到游标,具体获取方法,参考下面的例子。

假设接下来的例子都是建立在数据库中已经新建好的user表的基础上运行的:

CREATE TABLE `user` (
  `id` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3.增加

使用insert来将数据插入数据库

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 获取cursor
cursor.execute('INSERT INTO USER(name, id) VALUES (%s, %s);',['DonLex', 1]) # 执行sql语句

connection.close()# 关闭数据连接

可以看到,cursor的获取非常简单。执行sql语句也是易于理解的。

最后一定不要忘记了使用close()关闭数据连接。

4.删除

有一句话:“从删库到跑路”;可见删除数据是一件非常危险的操作。而一般做这些危险操作,都需要添加事务,这里为了简单,就不添加事务了。

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 获取cursor
sql = "DELETE FROM USER WHERE id=%s;" #使用%s进行占位
cursor.execute(sql, [0]) 
connection.close()# 关闭数据连接

5.修改

使用update来修改,通过set设置新的值,where代表选择条件

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 获取cursor

# 修改数据的SQL语句
sql = "UPDATE USER SET id=%s WHERE name=%s;"
id = 0
name = "DonLex"

# 执行SQL语句
cursor.execute(sql, [id, name])
connection.close()# 关闭数据连接

6.查询

查询则使用select来选择,from后面跟着表名,where是选择条件

import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor() # 获取cursor
cursor.execute('select * from user where id = %s', ('0',)) # 执行sql语句

values = cursor.fetchone() # 获取单条数据
print(values)
connection.close()# 关闭数据连接

获取单条数据使用fecthone();当获取多条数据时,则需要使用fecthall()

#查询数据库多条数据
result = cursor.fetchall()
for data in result:
    print(data)

7.事务

终于到数据库的重量级内容了。查了一下,关于事务的定义如下:

事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据应用该组查询的全部语句,那么久执行该组查询。如果其中任何一条语句因为崩溃或其他原因无法执行,那么所有语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。

事务的四大特性(ACID):
  1. 原子性(atomicity)
  2. 一致性(consistency)
  3. 隔离性(isolation)
  4. 持久性(durability)
实现代码
import pymysql

connection = pymysql.connect(
    port=3306,
    user='root',
    password='123456',
    database='test')
cursor = connection.cursor()
sql = "DELETE FROM USER WHERE id=%s;"
try:
    cursor.execute(sql, [1])
    # 提交事务
    connection.commit()
except Exception as e:
    # 有异常,回滚事务
    connection.rollback()

connection.close()

从上面的代码中可以看到,execute()执行删除操作使用try...except包起来了。如果在执行try的部分出错的话,就回滚,否则就提交事务。

更多精彩内容,敬请关注微信公众号:Python绿洲

你可能感兴趣的:(Python操作MySQL)