Python MySQLdb : table does not get deleted immediately

标签 python mysql mysql-python

在我的代码中,我尝试从数据库中删除一个表(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 注入(inject)攻击的函数。如果攻击成功,则会从数据库中删除一个表(我通过 check_table_from_db 检查这一点)。它将代码注入(inject)网站的某个字段中。因此删除表的代码是:

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

最佳答案

您忘记提交:

con.commit()

关于Python MySQLdb : table does not get deleted immediately,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29445675/

相关文章:

python - Python中的概率分布

python - 使用 Pandas 读取 Access 表的最简单方法?

mysql - 用于 ubuntu 14.04 的一个文件中的 ansible mysql 配置

python - 更改 python 3.3.2 中的 shell 打印颜色

python - 如何在kivy中制作圆形进度条?

android - SQLITE 批量插入以通过 UPDATE 和 INSERT 增加优化

MySql——大单表或多小表

mysql - 基于多条件的SQL查询

python - 无法在 Windows 中安装 mysql-python(较新版本)

python - ConfigParser.NoSectionError : No section: 'metadata' in installing mysql-python