程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 如何將百萬數據入PostgreSQL庫

編輯:Python

1. PostgreSQL 是什麼

PostgreSQL 是一個功能強大的開源對象關系型數據庫系統,他使用和擴展了SQL語言,並結合了許多安全存儲和擴展最復雜數據工作負載的功能。

PostgreSQL 的起源可以追溯到1986年,作為加州大學伯克利分校POSTGRES項目的一部分,並且在核心平台上進行了30多年的積極開發。

PostgreSQL 憑借其經過驗證的架構,可靠性,數據完整性,強大的功能集,可擴展性以及軟件背後的開源社區的奉獻精神贏得了良好的聲譽,以始終如一地提供高性能和創新的解決方案。

2. 業務驅動選擇 PostgreSQL

由於業務在做壓測時需要灌入大量的測試數據,試過很多方式都沒有很好解決,最終選擇用 Python 來實現數據灌入到 PostgreSQL,粗估數據處理效率可達6.5W/s.

3. Python代碼實現

代碼裡面有一個 batchs 的參數,用來控制批量插入數據庫批次,目前給的1000,效果還是十分不錯的。

代碼如下:

from openpyxl import load_workbook
import random
import psycopg2
batchs =1000
def data(datas):
    conn = None
    try:
        conn = psycopg2.connect(database="test_62554cf827ca24dc542c4258", user="postgres", password="123456",
                                host="10.10.11.248", port="5432")
        print("connected to postgres db successfully")
    except:
        print("I am unable to connect to the database")
    try:
        cursor = conn.cursor()
        sql = "insert into t_fact_6260d12dcd211247f807e521 values " + datas+";"
        print(sql)
        cursor.execute(sql)
    except (Exception, psycopg2.Error) as error:
        print("Error caught", error)
    finally:
        conn.commit()
        if (conn):
            cursor.close()
            conn.close()
def insertData():
    count = 0
    lw=load_workbook(r'D:\wl\bussiness_study\testdata.xlsx', read_only='read_only')
    ws = lw.active
    print(ws.rows)
    lst=[]
    strs = ""
    for row in ws.rows:
        count += 1
        lst.append("111"+str(random.random()))
        lst.append(0)
        lst.append("1634745600.0")
        lst.append("513567da-2d61-41db-a4cb-f2"+str(random.randint(100000000,999999999)))
        for col in row:
            lst.append(col.value)
        print("執行第--%d--行" % (count))
        # print(lst)
        str2 = str(tuple(lst)).replace("None", "'None'")+","
        # print(str2)
        if(count%batchs==0):
            strs += str2
            # print(strs)
            data(strs[:-1])
            lst = []
            strs = ""
            count=0
        else:
            strs += str2
            # print(strs)
            lst=[]
        str2 = ""
        # print(strs)
if __name__ == '__main__':
    insertData()

歡迎關注【無量測試之道】公眾號,回復【領取資源】

Python+Unittest框架API自動化、

Python+Unittest框架API自動化、

Python+Pytest框架API自動化、

Python+Pandas+Pyecharts大數據分析、

Python+Selenium框架Web的UI自動化、

Python+Appium框架APP的UI自動化、

Python編程學習資源干貨、

Vue前端組件化框架開發、

資源和代碼 免費送啦~
文章下方有公眾號二維碼,可直接微信掃一掃關注即可。

備注:我的個人公眾號已正式開通,致力於IT互聯網技術的分享。

包含:數據分析、大數據、機器學習、測試開發、API接口自動化、測試運維、UI自動化、性能測試、代碼檢測、編程技術等。

微信搜索公眾號:“無量測試之道”,或掃描下方二維碼:

  

 添加關注,讓我們一起共同成長!


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved