當前位置:成語大全網 - 新華字典 - Python3 MySQL executemany的使用?

Python3 MySQL executemany的使用?

題主妳好,

從妳的代碼來說, 妳的問題出在對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步同序列內嵌法中的描述.

=====

希望可以幫到題主, 歡迎追問