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))
#目前只用到批量插入,和判斷是否存在數據,如果存在就更新數據,否則就插入,以后用到別的繼續更新,
只是基礎的方法,並未封裝函數,或者封裝類。