Python MySQL executemany的使用

Python MySQL executemany的使用,第1张

个人理解:

execute中要使用对等格式 如 name(char), age(int),此时语句为: cur.execute("insert into db.table(name,age) values(%s,%d)" % (v[name], v[age]) ,v[name]为字符,v[age]为int

executemany中不需要强制格式,同上表语句为:

values=[("zhan",23),("li",33)]

executemany("insert into db.tables(name,age) values(%s,%s)",values)

具体原因我也不清楚,只能说是走过的坑吧,executemany一般只用%s即可,用其它的可能会报错。插入后的值是正常的(貌似是自动匹配列属性?),有大侠知道的也望指教

题主你好,

你的代码来说, 你的问题出在对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步同序列内嵌法中的描述.

=====

希望可以帮到题主, 欢迎追问


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7671766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-08
下一篇 2023-04-08

发表评论

登录后才能评论

评论列表(0条)

保存