MySQL为什么cursor.execute(sql,multi = True)不起作用但2 cursor.execute(sql)有效?

时间:2016-03-22 22:38:46

标签: python mysql

此代码有效:

sql = """TRUNCATE TABLE product_groups;"""
cursor.execute(sql)

sql = """INSERT INTO product_groups (origin, type, name, brand, concentration, gender) 
            SELECT origin, type, name, brand, concentration, gender
            FROM products
            GROUP BY origin, type, name, brand, concentration, gender
            ORDER BY brand, name;"""
cursor.execute(sql)

cursor.close()
conn.commit()
conn.close()

此代码不起作用:

sql = """TRUNCATE TABLE product_groups;
            INSERT INTO product_groups (origin, type, name, brand, concentration, gender) 
            SELECT origin, type, name, brand, concentration, gender
            FROM products
            GROUP BY origin, type, name, brand, concentration, gender
            ORDER BY brand, name;"""
cursor.execute(sql, multi=True)

cursor.close()
conn.commit()
conn.close()

两个代码之间的区别只是cursor.execute()。 在第一个代码中,我们有2个cursor.execute(sql)。 在第二个代码中,我们有1个cursor.execute(sql,multi = True)和2个SQL语句。

两个代码都不会引发错误,但是,第二个代码不会插入行。

为什么只有第一个代码有效?

1 个答案:

答案 0 :(得分:2)

本声明:

cursor.execute(sql, multi=True)

在结果上创建一个迭代器。看起来它很懒(即,它只根据需要执行SQL语句)。您永远不会要求第二个语句的结果,因此它只执行第一个语句。尝试:

for _ in cursor.execute(sql, multi=True): pass

一般情况下,最好只使用单独的execute()来电。