场景:
有一个增加数据的接口A,在为接口A拼装参数的时候创建了个数据库连接对象,去数据库里查询了(执行了一次select)某个数据用于拼装接口A的参数,这个时候数据库连接对象还在,未关闭
执行接口A
再次使用刚才创建的数据库连接对象去查询(又执行了一次select)刚才增加的数据是否增加成功
问题:
发现查询出来的始终是增加数据的前一条数据,效果如下,预期查询到的应该是oracle....,实际查询到的确是mysql.....
解决办法:
修改代码,在execute()方法后增加了commit()方法,达到了预期的查询效果
# 封装的数据库查询方法,直接根据sql返回查询结果
def select(self, sql):
cursor = self.conn.cursor()
cursor.execute(sql)
self.conn.commit() # 修改后增加的代码
result = cursor.fetchall()
cursor.close()
return result
总结:
在数据库学习过程中,了解到对数据库的修改操作需要执行commit()方法,否则修改不生效
本以为只是执行select语句,不需要执行commit()方法,实际中发现,如果在两次查询中间通过其他方式修改了数据(比如通过调接口或者手动修改数据库的数据),那么第二次查询是查询不到最新数据的
需要对数据库的事务机制近一步的学习了解,目前的理解就是如果要多次查询,且查询中间会通过其他方式修改数据,则需要在查询语句后跟上commit()方法