python中pymysql executemany 批量插入数据


import pymysql
import time
db = pymysql.connect("IP","username","password","database",charset='utf8')
cursor = db.cursor()
#数据库中的字段只是我自己的,可以根据所用字段自己进行测试。
#期格式要进行日期格式化,这一点还没找到好的方法处理
cursor.execute("""
  SELECT
  shop_name,
  receiver_area,
  receiver_address,
  date_format(pay_time,'%Y-%m-%d %H-%i-%s'),
  buyer_nick,

  receiver_name,
  receiver_mobile
  FROM detial limit 15000 """)
#此处是显示全部要入库的数据
data = cursor.fetchall() 
start = time.time()
#批量插入语句
cursor.executemany("""insert into d1
  (shop_name,receiver_area,receiver_address,pay_time,buyer_nick,receiver_name,receiver_mobile)
  values (%s,%s,%s,%s,%s,%s,%s)"""data)

#批量更新插入数据 on duplicate key update 跟要更新的数据 必须要有主键

cursor.executemany("""insert into d1
  (shop_name,receiver_area,receiver_address,pay_time,buyer_nick,receiver_name,receiver_mobile)
  values (%s,%s,%s,%s,%s,%s,%s)
  on duplicate key update receiver_name = values (receiver_name)""",data)


#必须要执行此操作才能写入到数据库
db.commit() 
cursor.close()
db.close()
end =time.time()
print(end -start)

# 如果是处理后的DataFrame类型的数据如果只是替换数据或者只是插入而不更新可以用下面的方式直接入库,
如果是替换,则会出现更改数据库字段格式。慎用!


conn = create_engine('mysql+pymysql://username:password/@ip:3306/database',encoding='utf8')

pd.io.sql.to_sql(deal_result, "sales", conn ,if_exists='append',index=None)

#如果是DataFrame类型的数据,利用元组转换,转换成多维元组,然后就可以通过普通的方式将数据插入或者更新到数据库中
data = tuple(map(tuple, data.values))

#目前只用到批量插入,和判断是否存在数据,如果存在就更新数据,否则就插入,以后用到别的继续更新,
只是基础的方法,并未封装函数,或者封装类。