[英]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.