Python的学习笔记DAY12---python和Mysql之二

        今天来看insert,update和delete的操作。它们三个的操作和select的在大体上是相同的,不过这三条命令对数据库的数据进行了修改,所以在某些时候可能会发生异常,所以在使用corsor.execute(sql)后如无异常则使用conn.commit()提交事务,如有异常则使用conn.rollback()回滚事务。所谓事务,就是访问和更新数据库的一个程序执行单元它具有四个特性:

        1.原子性:事务中包含的诸操作,要么都做,要么都不做

        2.一致性:事务必须使数据库从一致性状态变到另一个一致性状态

        3.隔离性:一件事务执行不被其他事务干扰

        4.持久性:事务一旦提交,其对数据库的改变是永久的

故在开发中要关闭自动commit,设置conn.aotucommit(False),正常结束事务conn.commit(),异常结束事务conn.rollback()。

        有如下图结构数据表user:


使用如下代码:

# -*- coding:utf-8 -*-  
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb

conn = MySQLdb.connect(host = '127.0.0.1',
                       port = 3306,
                       user = 'root',
                       passwd = '123456',
                       db = 'pytest',
                       charset = 'utf8' 
                       )

cursor = conn.cursor()

sql_insert = "insert into user(user,name,age) values('ten','十',10)"
sql_update = "update user set name = '9' where user = 'nine'"
sql_delete = "delete from user1 where age < 3"
    
cursor.execute(sql_insert)
print(cursor.rowcount)
cursor.execute(sql_update)
print(cursor.rowcount)
cursor.execute(sql_delete)
print(cursor.rowcount)
conn.commit()

cursor.close()
conn.close()
运行后输出:

1

1

2

此时数据表变成了:


操作执行成功。

        需要注意的是第一行必须加上下面的代码,不然的话汉字的插入会出现乱码现象。

# -*- coding:utf-8 -*-  
        上面的代码表示了insert,update和delete的用法,在实际操作中,会将SQL语句和其执行语句放到try中,诶下图代码所示,我们, 将sql_delete的SQL语句中的user改为user1来制造个异常看他如何处理。

        首先将数据库恢复到上面的数据。然后执行如下代码:

# -*- coding:utf-8 -*-  
import pymysql
pymysql.install_as_MySQLdb()
import MySQLdb

conn = MySQLdb.connect(host = '127.0.0.1',
                       port = 3306,
                       user = 'root',
                       passwd = '123456',
                       db = 'pytest',
                       charset = 'utf8' 
                       )

cursor = conn.cursor()

try:
    sql_insert = "insert into user(user,name,age) values('ten','十',10)"
    sql_update = "update user set name = '9' where user = 'nine'"
    sql_delete = "delete from user1 where age < 3"
    
    cursor.execute(sql_insert)
    print(cursor.rowcount)
    cursor.execute(sql_update)
    print(cursor.rowcount)
    cursor.execute(sql_delete)
    print(cursor.rowcount)
    
    conn.commit()
except Exception as e:
    print(e)
    conn.rollback()


cursor.close()
conn.close()
执行结果如图:


没有找见user1这个表,然后查看数据库,并未改变,表明在执行出错之后执行了conn.rollback(),回滚了事务,并没有对数据库进行修改。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值