取决于您的需求!mysql的innodb支持多种事务隔离级别:READUNCOMMITTEDREADCOMMITTEDREPEATABLEREADSERIALIZABLE默认隔离级别为REPEATABLEREADpgsql默认隔离级别为READCOMMITTED;SQLserver默认为READUNCOMMITTED;oracle默认是ReadCommitted我们使用了mysql默认的事务隔离级别,并且关闭了自动提交事务:SETAUTOCOMMIT=0。正好你用了select之后没有commit。那么你一生中将只能读取重复的数据。比如下表:connect1,读取id=1的行,connectto2,把id=1的行的名字改成pon。此时连接1,读取id=1的行。你觉得叫什么名字?是1还是pon?答案是1,不是pon,这很糟糕。我如何读取pon而不是1?解决方案一:对于连接一,select后,指定commit,roollback,begin等操作,开启一个新的事务解决方案二:调整事务隔离级别为READCOMMITTEDimportpymysqlimportpymysql.cursorsfrompymysql.connectionsimportConnectionfromloguruimportlogger#Connectto数据库connection_1:Connection=pymysql.connect(host='192.168.31.245',user='root',password='xxxx',port=3306,database='seckill',cursorclass=pymysql.cursors.DictCursor)cursor_1=connection_1.cursor()connection_2:Connection=pymysql.connect(host='192.168.31.245',user='root',password='xxxx',port=3306,database='秒杀',cursorclass=pymysql.cursors.DictCursor)cursor_2=connection_2.cursor()sql="""SELECT*FROMaccountWHEREid=1;""".strip()cursor_1.execute(sql)logger.debug(cursor_1.fetchall())connection_1.commit()#sql="""#DELETEFROMaccountwherename='jike';#""".strip()sql="""UPDATEaccountSETname="pon"WHEREid=1;""".strip()cursor_2.execute(sql)connection_2.commit()sql="""SELECT*FROMaccountWHEREid=1;""".strip()cursor_1.execute(sql)logger.debug(cursor_1.fetchall())调整事务隔离级别,有两个作用域:SESSION和GLOBALSET{SESSION|GLOBAL}事务隔离级别{READUNCOMMITTED|阅读已提交|可重复阅读|可序列化};参考:开发中经常需要确认一些关于mysql的信息
