目录

事务

python操作mysql数据库的步骤


事务

事务具有的特性:原子性、一致性、隔离性、持久性

python连接mysql后,数据库默认开启事务,开启事务后,操作的数据写入缓存区,当事务提交后,操作的数据才会保存。所以在对表数据进行增、删、改之后,要使操作生效就需要提交事务。

开启事务:start transaction;            # 如果是和数据库连接,会自动开启,不需要执行

提交事务:commit;

回滚:rollback;     

python操作mysql数据库的步骤

创建连接(connection)——>获取游标(cursor)——>执行数据库命令操作(sql)——>提交事务(commit)或回滚(rollback)——>关闭游标——>关闭连接

完整流程:

import pymysql

config = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='qwe123',charset='utf8')
cur = config.cursor()

try:
    def insertdata(id,name):
        cur.execute('use 数据库1')
        cur.execute(f"insert into 学生表 values ({id},'{name}')")
        config.commit()
    insertdata(1,'中国')
except Exception as e:
    print('一个错误:',e)
    config.rollback()
finally:
    cur.close()
    config.close()

连接数据方法示例:

import pymysql  # 导入模块

# 两种连接数据库对象的的参数写法
sql_config ={
    'host':'127.0.0.1',
    'port':3306,
    'user':'root',
    'password':'qwe123',
    # 'db':'databasename',    # 在不需要创建数据库,而是直接调用某个数据库的时候可以加上这个参数
    'charset':'utf8'
}
connection = pymysql.connect(**sql_config)  # 连接mysql,创建一个数据库对象
# connect = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='qwe123',db='mysql',charset='utf8')

# 创建游标,mysql的语句都是通过游标对象来执行的
curs = connection.cursor()

# 创建数据库和使用数据库
curs.execute('create database 数据库2')  # 创建数据库
curs.execute('use 数据库2')  # 使用数据库

# 创建数据表
table1 = '''
create table 学生表(
id int(10) primary key,
name varchar(20) not null)
'''
curs.execute(table1)

# 查看表结构
curs.execute('desc 学生表')
print(curs.fetchall())

# 插入表数据
sql_insert = '''
insert into 学生表 
values (2020001,'过去'),(2020002,'现在'),(2020003,'将来')
'''
curs.execute(sql_insert)

curs.execute('select * from 学生表')  # 执行查看表数据的sql语句
# 查看数据内容的方法
print(curs.execute('show databases'))  # 如果是通过游标对象的execte()方法查看数据库结果,只展示查询出来的数据数量
# print(curs.fetchone())  # 只查看第一条数据
# print(curs.fetchmany(2))  # 查看多条数据,参数为指定查询的数据数量
print(curs.fetchall())  # 查看所有数据

# 使用完数据库的后续操作
connection.commit()  # 每次对表数据的增删改都需要提交事务后,数据才能真正写入数据库,提交事务的方法:对创建数据库对象使用commit()方法
# 同文件操作一样,在每次使用完数据库之后都需要断开游标和数据库
curs.close()  # 断开游标
connection.close()  # 关闭数据库