天天看點

轉換csv檔案為插入的sql腳本【web端實作方案】

作者:趣味樂高

背景:

上一篇文章分享了一個本地的實作方案,但是這個盡管打包成exe的完整包的方式,由于實作方式是使用python,打包出來後的檔案裡包含了使用到的庫和python運作程式,啟動時内部會需要解壓出來,是以啟動會比較慢,大概3~5秒啟動,對于追求性能的優秀人才就會覺得這個效率太低了,那能不能實作一個web方案,這樣web端提供一個傳入需要轉換的檔案,然後傳回一個轉換好的檔案,這樣就不需要每個人的包都那麼大,運作還慢,而且還沒法實時更新。

解決方案:

1.通過web前端進行檔案上傳到伺服器上,設定一個送出頁面模闆檔案uploader.html

<html>
<head>
    <meta charset="UTF-8">
  <title>檔案上傳</title>
</head>
<body>
    <form action="/uploadfile" method="POST" enctype="multipart/form-data">
        <input type="file" name="uploadfile"  />
        <input type="submit" value="送出" />
    </form>
</body>
</html>           

2.建立一個接口進行檔案的上傳,利用flask進行接口生成

轉換csv檔案為插入的sql腳本【web端實作方案】
from flask import Flask

from biz.openapi.com_api_webres import blue_webres_mgr

webapp = Flask(__name__, template_folder='../biz/templates')
webapp.register_blueprint(blueprint=blue_webres_mgr)

if __name__ == '__main__':
    webapp.run(port=8083)           
blue_webres_mgr = Blueprint('webres_mgr', __name__, template_folder='../templates')
webconfig = {}
webconfig['UPLOAD_FOLDER'] = '../upload/'

@blue_webres_mgr.route('/upload')
def upload_file():
    return render_template('uploader.html')

@blue_webres_mgr.route('/uploadfile',methods=['GET','POST'])
def uploader_File():
    if request.method == 'POST':
        f = request.files['uploadfile']
        basefilepath = os.path.join(webconfig['UPLOAD_FOLDER']) + f.filename
        newfilename = ''
        if os.path.exists(basefilepath):

            fileext = os.path.splitext(f.filename)[-1]
            filename = os.path.basename(f.filename).split(fileext)[0]
            newfilename = "{}_{}{}".format(filename, int(time.time()), fileext)
            basefilepath = "{}{}".format(os.path.join(webconfig['UPLOAD_FOLDER']),newfilename)

        f.save(basefilepath)
        transcsv = TransCSVDataToSql(basefilepath)
        filepath, webdir, sqlfile = transcsv.TransFile()
        linkurl = 'http://127.0.0.1/{}/{}'.format(webdir, sqlfile)
        return render_template('downloadsql.html',transfile= f.filename,respath=filepath,linkurl=linkurl, sqlfile=sqlfile)
    else:
        return render_template('uploader.html')           

3.利用nginx建立一個web網站服務,可以直接使用phpstudy一鍵部署

轉換csv檔案為插入的sql腳本【web端實作方案】

啟動nginx就可以了,當然如果需要配置不同的端口,還有位址的,自行通過配置按鈕進行配置

轉換csv檔案為插入的sql腳本【web端實作方案】

4.調用上一篇文章中的檔案讀取,轉換的實作類進行檔案的轉換和存儲

轉換後的檔案直接存放到web網站的www下的工程目錄下

首先配置好自己的目錄位址

def __init__(self, csvFile:str):
    self.CSVFile = csvFile
    # 儲存的檔案名
    self.SaveFile = 'trans_{}.sql'.format(time.time())
    # 項目儲存的目錄
    self.WebDir = 'softfiles'
    # phpstudy指定的www所在目錄+項目的目錄
    self.WebbasePath = 'D:/phpstudy_pro/WWW/softfiles/'           

配置的是WWW就是網站下的softfiles目錄下

5.輸出網站可以通路到的頁面下載下傳位址

配置web可以通路的到的位址

linkurl = 'http://127.0.0.1/{}/{}'.format(webdir, sqlfile)           

如果釋出在公網或者内網上,則把127.0.0.1的IP更改為部署好的伺服器域名或IP即可

配置下載下傳頁面的html模闆downloadsql.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>轉換好的sql</title>
</head>
<body>
<table border="1">
    <tr>
        <th>檔案所在路徑</th>
        <th>需要轉換的csv檔案</th>
        <th>轉換完成的sql檔案</th>
        <th>下載下傳位址</th>
    </tr>
    <tr>
        <td>{{respath}}</td>
        <td>{{transfile}}</td>
        <td>{{sqlfile}}</td>
        <td><a href={{linkurl}}>下載下傳位址</a></td>
    </tr>
</table>

</body>
</html>           

6.來看看最終的效果吧

啟動服務端,

轉換csv檔案為插入的sql腳本【web端實作方案】

啟動Nginx,在浏覽器中輸入

127.0.0.1:8083/upload

出現頁面

轉換csv檔案為插入的sql腳本【web端實作方案】

然後點選浏覽,打開導出的csv檔案

轉換csv檔案為插入的sql腳本【web端實作方案】

選擇好後點選打開,最後點選頁面中的“送出”按鈕

會展現一個下載下傳頁面位址

轉換csv檔案為插入的sql腳本【web端實作方案】

點選下載下傳位址即可進行轉換後的檔案的下載下傳,然後就可以使用這個sql腳本進行刷庫了

結語:

通過這個web端的轉換,對于使用使用者來說,隻需要輸入一個位址,然後上傳檔案即可完成轉換工作,比本地版要快速很多,而且隻要web端更新了新的解析規則,自己都不需要去處理,自然就能使用到最新的,啟動效率也是大大提升。

好了,今天的分享就到這了,感謝大家的閱讀!

繼續閱讀