簡體   English   中英

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

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM