python批量插⼊数据到postgreSql
开源的关系型数据库, mysql 和 postgreSql 都有很久的历史, 应⽤也很⼴泛了, 今天有机会接触postgreSql11。
python 连接postgreSql 数据库, ⽤的驱动⼯具是psycopg2。
官⽅⽂档地址:
操纵插⼊3000w 条记录发现⽤单条插⼊的速度很慢,必须⽤批量插⼊的⽅法了。 啃了⼀遍官⽅⽂档, 终于在最后最后最后⾯发现了批量操作的说明,操作后批量⽐单条快了10倍左右的速度。
1from psycopg2 import extras as ex
2
3#values 后⾯直接%s
4sql = '''insert into mytable(tag1, tag2)
5 values %s
6 '''
7datalist = []
8#这⾥做⼀个循环,循环加⼊数据
9datalist.append((192,342344)) #⾏数据是以元组的形式存放
10
12
13connmit() #需要⼿动提交
官⽅具体说明地址:
今天再接触了 postgreSQL 的copy 语法,copy_from 和 copy_to 才是postgreSQL 单客户端单线程最强的输⼊和输出, ⽐上⾯的批量操作还要快10倍,3000w 的模拟数据3分钟就可以插完。
官⽅⽂档说明地址:
mysql下载的vs库放在那个文件里1import psycopg2 as pg
2from io import StringIO
3
4 f = StringIO() #StringIO 结构类似⽂件,但是内容都在内存⾥⾯
5
6#循环写⼊数据到内存⾥⾯,⾥⾯每个字段⽤制表符\t 隔开,每⼀⾏⽤换⾏符\n 隔开
7 f.write("1\t192\t234234\n")
8
9#最重要的⼀步,要把f 的游标移到第⼀位,write ⽅法后,游标会变成最尾,StringIO(**) 就不会
10 f.seek(0)
11
13 columns=("tag1", "tag2", "tag3"),
14 sep='\t', null='\\N', size=16384) #默认sep和null 都是none
15
16connmit() #要⾃⼰⼿动提交
第⼀次接触postgreSql, 有⼀些注意点备忘
1. 表名的字母最好都是⼩写, 不然你每次查询的时候的表名都要加双引号,不然你试试,提⽰不到表的。
2. 怪不得说pg 很想oracle, 隐藏的列ctid 跟oracle 的rowid 差不多,所以pgadmin 能⽀持查询编辑。
3. pg 的表能继承, 这个倒是其他数据库没有的, tableoid 配合 pg_class 可以知道列是具体哪个表的
4.
odbc 驱动
c#驱动 npgsql , vs2017 nuget 搜索下载
同样可以⽤copy 语法,⾃动提交的, 执⾏⽐python 要快⼀些, 脚本语⾔慢⼀点正常。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论