[英]MySQL why cursor.execute(sql, multi=True) does not work but 2 cursor.execute(sql) works?
此代码有效:
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语句。
两种代码都不会引发错误,但是第二种代码不会插入行。
为什么只有第一个代码有效?
这个说法:
cursor.execute(sql, multi=True)
在结果上创建一个迭代器。 看起来很懒(即仅根据需要执行SQL语句)。 您永远不会要求第二条语句的结果,因此它仅执行第一条语句。 尝试:
for _ in cursor.execute(sql, multi=True): pass
通常,最好只使用单独的execute()
调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.