用Python3操作Mysql

  • 安装第三方库【pymysql】
  • 连接数据库
  • 插入数据
  • 批量插入数据
  • 查询数据
  • 修改数据
  • 删除数据
  • 事务说明


安装第三方库【pymysql】

在python3中,可以使用【pymysql】来操作Mysql数据库。
通过【pip install pymysql】命令安装。
然后在代码中通过以下语句来测试是否可用:

import pymysql

连接数据库

下文内容都假设Mysql数据库及表都以建好,信息如下:
Mysql User:root
Mysql Password: ******
数据库名:test,表名:hello,字段:id(主键,自增),name
数据库连接代码如下:

import pymysql # 导入库

# 为了便于讲解,把获取链接封装到一个方法里
def getConnection(): 
	# 数据库连接
    conn = pymysql.connect(host='localhost', user='root',password='******',database='test',charset='utf8')
    # 可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 返回连接和光标对象,以供后续代码使用
    return (conn, cursor)

# 连接和光标对象使用完后,要释放到相应的资源,也封闭到一个函数里
def closeConnection(conn, cursor):
    cursor.close()
    conn.close()

插入数据

直接看代码:

# 定义插入方法
def myAdd():
    conn, cursor = getConnection() # 获取连接与光标对象,上面已定义
    sql = 'insert into hello(name) values (%s)' # 定义sql语句
    uName = 'xiaomin'
    try:
        cursor.execute(sql, [uName]) # 执行sql,但此时还未提到到数据库中
        conn.commit() # 提交事务
        last_id = cursor.lastrowid
    except Exception as e:
        conn.rollback() # 如发生异常,则回滚事务
    finally:
        closeConnection(conn, cursor) # 释放连接与光标对象,上面已定义

# 调用插入方法
myAdd()

批量插入数据

直接看代码:

# 定义批量插入方法
def myMultiAdd():
    conn, cursor = getConnection()
    sql = 'insert into hello(id, name) values (%s, %s)'
    records = [(15, 'a'), (16, 'b'), (17, 'c')]
    try:
        cursor.executemany(sql, records) # 遍历records列表中的元组进行插入,中间有异常时,则到异常处理中进行回滚
        conn.commit() # 提交事务
    except Exception as e:
        conn.rollback() # 异常时回滚事务
        print(e)
    finally:
        closeConnection(conn, cursor)

# 调用批量插入方法
myMultiAdd()

查询数据

直接看代码:

# 定义查询方法
def myQuery():
    conn, cursor = getConnection() # 获取连接与光标对象,上面已定义
    sql = 'select * from hello'
    cursor.execute(sql)
    rtl = cursor.fetchall() # 获取全部数据
    print(rtl)
    closeConnection(conn, cursor) # 释放连接与光标对象,上面已定义

# 调用查询方法
myQuery()

修改数据

直接看代码:

# 定义修改方法
def modify():
    conn, cursor = getConnection()
    sql = 'update hello set name=%s where id=%s'
    id = '3'
    uName= 'like'
    try:
        cursor.execute(sql, [uName, id]) # 执行,但并示在数据库反映
        conn.commit() # 提交事务
    except Exception as e:
        conn.rollback() # 如发生异常则回滚事务
        print(e)
    finally:
        closeConnection(conn, cursor)

# 调用修改方法
myModify()

删除数据

直接看代码:

# 定义删除方法
def myDelete():
    conn, cursor = getConnection()
    sql = 'delete from hello where id=%s'
    id = '3'
    try:
        cursor.execute(sql, [id]) # 执行,但并示在数据库反映
        conn.commit()
    except Exception as e:
        conn.rollback()
        print(e)
    finally:
        closeConnection(conn, cursor) # 如发生异常则回滚事务
       
# 调用删除方法 
myDelete()

事务说明

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。具体的可以百度一下,这样不哆嗦了。
在Python中,事务提供了两个方法 commit 方法和 rollback方法。
当游标建立之时,就自动开始了一个隐形的数据库事务。

  1. 当调用commit()方法时,会将游标里的所有操作提交到数据库;
  2. 当调用rollback()方法时,会回滚游标里的所有操作;
  3. 上述任一方法被调用时,都会开启一个新的事务。
    例:
try:
    cursor.execute(sql, ['a', 1]) # 执行SQL语句
    cursor.execute(sql, ['b', 2]) # 执行SQL语句
    cursor.execute(sql, ['c', 3]) # 执行SQL语句
    cursor.commit() # 提交到数据库
except Exception as e:
    conn.rollback() # 发生异常时回滚所有cursor游标中的操作(不管有没有执行过的)