• python操作mysql


    数据库的事务机制:
    事务机制可以确保数据一致性。
    事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
    原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
    一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。


    对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
    conn.commit()方法游标的所有更新操作,conn.rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

    python连接mysql需要用到MySQLdb这个模块,MySQLdb的常用方法有:
    cur.fetchone() # 该方法获取下一个查询结果集。结果集是一个对象
    cur.fetchall() # 接收全部的返回结果行

    例1:

     1 # -*- coding: utf-8 -*-
     2 import MySQLdb
     3 
     4 host = "localhost"
     5 port = 3306
     6 user = "root"
     7 passwd = "pass"
     8 db = "my_test_db"
     9 
    10 conn = MySQLdb.connect(host=host, port=port, user=user, passwd=passwd, db = db) # 打开数据库连接
    11 cur = conn.cursor() # 使用cursor()方法获取操作游标
    12 try:
    13     sql = "insert into test values('str',1,-1)"
    14     cur.execute(sql)
    15     sql = "insert into te1st values('str',2,-2)" # 这是一条错误的sql,因为事务机制,所以上1条sql语句也不会执行
    16     cur.execute(sql)
    17     conn.commit() # 提交到数据库执行
    18 except:
    19     conn.rollback() # 发生错误时回滚
    20 sql = "select * from test"
    21 cur.execute(sql)
    22 print cur.fetchall()
    23 sql = "insert into test values('str',3,-3)" # 一条正确的插入语句
    24 cur.execute(sql)
    25 conn.commit() # 提交到数据库执行
    26 sql = "select * from test"
    27 cur.execute(sql)
    28 print cur.fetchall()
    29 conn.close() # 关闭数据库连接,一定要关闭,连接开太多会出问题

    运行结果:

     

    例2:

     1 # -*- coding: utf-8 -*-
     2 import MySQLdb
     3 
     4 host = "localhost"
     5 port = 3306
     6 user = "root"
     7 passwd = "pass"
     8 db = "my_test_db"
     9 
    10 conn = MySQLdb.connect(host=host, port=port, user=user, passwd=passwd, db = db, charset='utf8') # 打开数据库连接,并设置编码
    11 print conn.get_autocommit()
    12 conn.autocommit(1) # 设置自动提交,默认为false
    13 print conn.get_autocommit()
    14 cur = conn.cursor() # 使用cursor()方法获取操作游标
    15 try:
    16     sql = "insert into test values('str',1,-1)"
    17     cur.execute(sql)
    18     sql = "insert into te1st values('str',2,-2)" # 这一条出错了并不会影响上一条sql语句的执行
    19     cur.execute(sql)
    20 except:
    21     conn.rollback() # 发生错误时回滚
    22 sql = "select * from test"
    23 cur.execute(sql)
    24 print cur.fetchall()
    25 sql = "insert into test values('str',3,-3)" # 一条正确的插入语句
    26 cur.execute(sql)
    27 sql = "select * from test"
    28 cur.execute(sql)
    29 print cur.fetchall()
    30 conn.close() # 关闭数据库连接,一定要关闭,连接开太多会出问题

    运行结果:

  • 相关阅读:
    vue.js打包后,接口安全问题
    PHP开发api接口安全验证
    DOS命令操作 规格严格
    IIS 规格严格
    Swing语法高亮 规格严格
    Jetty 规格严格
    How to avoid “Illegal type in constant pool 规格严格
    数据库表产生类 规格严格
    利用Java编写简单IIS日志清理工具 规格严格
    语法高亮 规格严格
  • 原文地址:https://www.cnblogs.com/ACGame/p/8442056.html
Copyright © 2020-2023  润新知