瞧!Python 如何将百万数据入PostgreSQL库[通俗易懂]

瞧!Python 如何将百万数据入PostgreSQL库[通俗易懂]1. PostgreSQL 是什么PostgreSQL 是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储

大家好,欢迎来到IT知识分享网。

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()

IT知识分享网

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6544.html

(0)
上一篇 2022-12-15 17:50
下一篇 2022-12-15 18:10

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信