2015-04-04 52 views
0

在我的代码中,我尝试从我的数据库(delete_table函数)中删除一个表。就在此之后,我检查表是否已被删除(check_table_from_db函数)。当我这样做时,表被删除,但check_table_from_db函数显示它不是。当我在两个不同的运行(两个不同的程序)中执行此过程时。结果是正确的。 以下是check_table_from_db代码:Python MySQLdb:表不会立即删除

def check_table_from_db(table_name): 
    import MySQLdb as mdb 
    try: 
     exists = False 
     con = mdb.connect('localhost', 'user', '123', 'test') 
     cur = con.cursor() 
     s = "SHOW TABLES LIKE '%s'" % (table_name) 
     cur.execute(s) 
     exists = (cur.rowcount > 0) 
    except mdb.Error, e: 
     print "Error %d: %s" % (e.args[0],e.args[1]) 
     sys.exit(1) 
    finally:   
     if con: 
      cur.close() 
      con.close() 
     return exists 

编辑: 既然已被要求发布的delete_table功能,我需要解释什么是通用的。 delete_table是一个模仿SQL注入攻击的函数。如果攻击成功,那么表将从数据库中删除(我通过check_table_from_db检查了这一点)。它在网站的一个字段中注入代码。至于删除表这样的代码是:

attack_script = "');DROP TABLE test2;" 
_resp = utilities.submit_form(utilities.get_absolute_url(fd.get('action'), main_url), {'uname':'test', 'password':'test', 'cpassword':'test', 'fname':'', 'lname':'', 'age':'', 'major':'', 'university':attack_script}, method=fd.get('method')) 

通过submit_form功能,我在填充网站的形式和我提交。一旦提交,我然后检查表是否被删除。

+0

请也给了'delete_table'的代码。 – 2015-04-04 17:28:03

回答

0

你忘了承诺:

con.commit() 
+0

不幸的是,它没有奏效。有没有办法提交以前的连接对象中发生的所有以前的事务(这些对象是未知的)? – user1894963 2015-04-16 18:02:49