題主妳好,
從妳的代碼來說, 妳的問題出在對executemany(sql, data)這個方法的邏輯沒弄明白.
咱們對比壹下execute(sql)和executemany(sql, data), 這裏假設sql執行的是插入操作:
前者是執行單條操作,要插入的數據是寫死在sql這個字符串中的;
後者是批量執行插入操作.關鍵的地方在於sql參數中留出格式化字符, 而數據是從data中取,這麽說不好理解,看例子吧:
sql改為:
sql = "INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)"
註意和妳的對比壹下:
sql = "INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)" % (aa,bb,cc)
-----
關鍵是data參數,有兩種寫法,壹種是序列內嵌, 壹種是字典:
序列內嵌(外層必須是列表, 內層元素是列表或元組)
data=[[1,2,3],[4,5,6],[7,8,9]]
data=[(1,2,3),(4,5,6),(7,8,9)]
字典:
使用字典時,sql也要相應的改壹下:
sql = "INSERT INTO bbb(nu1, nu2, nu3) VALUES (%(nu1)s, %(nu2)s, %(nu3)s)"
data參數外層還是壹個列表, 內層元素是壹個個的字典,即壹個字典表示壹條將要被插入的數據:
data = [ { 'nu1':1, 'nu2':2, 'nu3':3 }, { 'nu1':1, 'nu2':2, 'nu3':3 } ]
-----
再說下最終的邏輯:
序列內嵌法:
1.可以使用for循環先得到壹個外層是列表,內層元素是列表或元組的這的壹個列表:
ll= []
for i in itertools.permutations(range(1,8),3):
ll.append(i)
2.然後再構建sql語句:
sql = "INSERT INTO bbb(nu1, nu2, nu3) VALUES (%s, %s, %s)"
3.調用executemany():
cursor.executemany(sql,ll)
4.最後調用commit(),提交給數據庫執行:
yydd.commit()
-----
字典法的邏輯:
1.使用for循環構建壹個元素是字典的列表:
ll= []
for i in itertools.permutations(range(1,8),3):
ll.append({'nu1':i[0], 'nu2':i[1], 'nu3':i[2]})
2.構建sql語句:
sql = "INSERT INTO bbb(nu1, nu2, nu3) VALUES (%(nu1)s, %(nu2)s, %(nu3)s)"
3,4步同序列內嵌法中的描述.
=====
希望可以幫到題主, 歡迎追問