利用跳板機連線mysql,匯出資料到csv

joey_2018_發表於2020-12-14

需求:

資料庫裡有很多店鋪的點位(經緯度)資訊,大概有900多萬條。現在需要將這900多萬條店鋪資料按照省份的欄位匯出,一共有34個省份。

其實人工可解,直接sql,按照省份匯出就行,當時我就是這麼做的,因為還沒接觸pandas哈哈。現在記錄一下,以後就不需要人肉儲存資料啦。

實現:

1.因為是外網環境,所以要用到跳板機連線

2.通過pandas迴圈匯出資料到不同問價。

用到的庫:

pandas,pymysql,sshtunnel

 

注意點:

使用TUNNEL.start() 之後一定要用TUNNEL.close(),否則這個執行緒會一直掛著。好像前段時間還因為這個坑了一下同事!

程式碼如下:

import pandas as pd
import pymysql
from sshtunnel import SSHTunnelForwarder
#通過查詢資料庫資料,匯出excel表
TUNNEL = SSHTunnelForwarder(("111.111.111.111", 1111),       #跳板機的地址,埠
                    ssh_username="abcd", #跳板機使用者名稱
                    ssh_password="abcd",   #跳板機訪問密碼
                    remote_bind_address=("172.11.11.11", 3306))  #目標資料庫地址&埠
TUNNEL.start()

conn = pymysql.connect(host='127.0.0.1',
                       port=TUNNEL.local_bind_port,    #預設必填
                       user="111",       #資料庫使用者名稱             
                       password="11111",#資料庫密碼  
                       database="1111")  #資料庫名  
#將所有省份放在陣列中,因為已經導好了,就隨便整兩三個
pl = ['山西省','江西省','河南省']
sql = "SELECT name,ADDRESS,lng,lat,pname,city_name from location WHERE pname='%s'" 
#pandas匯入mysql資料
for p in pl:
    sql1 = sql % p
    print(sql1)
    a = pd.read_sql(sql1,conn)
    f = 'E:\\爬蟲\\pandas\\%s.csv' % p
    print(f,'資料生成中')
    a.to_csv(f,index=False,encoding='utf_8_sig')


conn.close()
TUNNEL.close()

 

相關文章