我是靠谱客的博主 俭朴宝贝,最近开发中收集的这篇文章主要介绍python 批量插入数据到postgreSql,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开源的关系型数据库, mysql 和 postgreSql 都有很久的历史, 应用也很广泛了, 今天有机会接触postgreSql11。

python 连接postgreSql 数据库, 用的驱动工具是psycopg2。

官方文档地址:http://initd.org/psycopg/docs/

操纵插入3000w 条记录发现用单条插入的速度很慢,必须用批量插入的方法了。 啃了一遍官方文档, 终于在最后最后最后面发现了批量操作的说明,操作后批量比单条快了10倍左右的速度。

from psycopg2 import extras as ex
#values 后面直接%s
sql = '''insert into mytable(tag1, tag2)
values %s
'''
datalist = []
#这里做一个循环, 循环加入数据
datalist.append((192,342344))
#行数据是以元组的形式存放
ex.execute_values(cursor,sql, datalist,page_size=10000)
conn.commit()
#需要手动提交

官方具体说明地址:http://initd.org/psycopg/docs/extras.html#fast-execution-helpers

今天再接触了 postgreSQL 的copy 语法,copy_from 和 copy_to 才是postgreSQL 单客户端单线程最强的输入和输出, 比上面的批量操作还要快10倍,3000w 的模拟数据3分钟就可以插完。

官方文档说明地址:http://initd.org/psycopg/docs/cursor.html#cursor.copy_from

import psycopg2 as pg
from io import StringIO
f = StringIO()
#StringIO 结构类似文件,但是内容都在内存里面
#循环写入数据到内存里面, 里面每个字段用制表符t 隔开,每一行用换行符n 隔开
f.write("1t192t234234n")
#最重要的一步,要把f 的游标移到第一位,write 方法后,游标会变成最尾,StringIO(**) 就不会
f.seek(0)
cursor.copy_from(f, "myTable",
columns=("tag1", "tag2", "tag3"),
sep='t', null='\N', size=16384)
#默认sep和null 都是none
conn.commit()
#要自己手动提交

 

第一次接触postgreSql, 有一些注意点备忘

  1. 表名的字母最好都是小写, 不然你每次查询的时候的表名都要加双引号,不然你试试,提示找不到表的。
  2. 怪不得说pg 很想oracle, 隐藏的列ctid 跟oracle 的rowid 差不多,所以pgadmin 能支持查询编辑。
  3. pg 的表能继承, 这个倒是其他数据库没有的, tableoid 配合 pg_class 可以知道列是具体哪个表的
  4.  

odbc 驱动

https://www.postgresql.org/ftp/odbc/versions/msi/

c#驱动 npgsql , vs2017 nuget 搜索下载

同样可以用copy 语法,自动提交的, 执行比python 要快一些, 脚本语言慢一点正常。

 

最后

以上就是俭朴宝贝为你收集整理的python 批量插入数据到postgreSql的全部内容,希望文章能够帮你解决python 批量插入数据到postgreSql所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部