python数据查询操做之 一场缺乏db.commit()引起的血案……

最近大做业用到了python操做数据库的内容。涉及的库是pymmysql,我就不详细介绍这个库的操做了,直接奔入主题--->开整python



 背景:mysql

       涉及程序中一个实时查看数据表中state字段==1的功能,我把这个功能单独择出来写成了下面的代码: sql

 1 # -*- coding=utf-8 -*-
 2 import pymysql
 3 config={
 4     "host":"127.0.0.1",
 5     "user":"root",
 6     "password":"root",
 7     "database":"Person"
 8 }
 9 db = pymysql.connect(**config)
10 cursor=db.cursor()
11 while True:
12     a=input("Input something interesting:")
13     sql = "select username from client where state=1"
14     try:
15         cursor.execute(sql) 
16         result=cursor.fetchall()
17     except:
18         db.rollback()
19     print(result)
20 cursor.close()
21 db.close()

    

  这是数据库Person的数据表client内容,关键在最后的state内容数据库

  执行这个代码:python3 testdb.py 出现下面效果:测试

       

   如今看起来是正确的,可是如今不关闭这个python程序,使其阻塞,同时更改数据库内容fetch

  

  我把Iverson这条数据的状态state也设为1,而后跑去python继续执行看有什么结果spa

  

  发现,虽然直接操控数据库成功,代码查询仍是之前的结果没有变化……3d



  解决方案:rest

  作了不少次修改,把cursor的定义和关闭都放到while循环里面都没变化仍是存在问题;code

  最后才发现我是少了关键的一行代码---db.commit(),添加后的代码

  

 1 import pymysql
 2 config={
 3     "host":"127.0.0.1",
 4     "user":"root",
 5     "password":"root",
 6     "database":"Person"
 7 }
 8 db = pymysql.connect(**config)
 9 cursor=db.cursor()
10 while True:
11     a=input("Input something interesting:")
12     sql = "select username from client where state=1"
13     try:
14         cursor.execute(sql) 
15         db.commit()
16         result=cursor.fetchall()
17     except:
18         db.rollback()
19     print(result)
20 cursor.close()
21 db.close()

  执行下:

  初始状态

  更改数据库:

  

  再次测试代码:

   

  此次终于没问题了……心累



 

      总结:

  第一次看python关于mysql的操做的是菜鸟教程,关于commit方法第一感受是这个方法只用来提交“数据”,好比插入数据、更新数据须要在execute()后面跟上一个commit();如今看来,commit()方法须要跟在增(insert)、删(delete)、改(update)、查(select)的任何execute()语句后面。commit是把查询语句提交到数据库内,而不仅是要向数据库提交增、添的数据。

  就这样吧……

相关文章
相关标签/搜索