【问题标题】:Python MySQLdb: table does not get deleted immediatelyPython MySQLdb:表不会立即被删除
【发布时间】:2015-04-04 11:09:27
【问题描述】:

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

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 函数,我在网站中填充表单并提交。提交后,我会检查该表是否被删除。

【问题讨论】:

  • 请同时提供delete_table的代码。

标签: python mysql mysql-python


【解决方案1】:

你忘了提交:

con.commit()

【讨论】:

  • 不幸的是,它不起作用。有没有办法提交在以前的连接对象中发生的所有以前的事务(这些对象是未知的)?
猜你喜欢
  • 1970-01-01
  • 2020-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多