在批量插入postgresql时想使用同Mysql的语法时发现并不能使用:

cursor.executemany("INSERT INTO persons VALUES (%d, %s, %s)",[(1, 'John Smith', 'John Doe'),(2, 'Jane Doe', 'Joe Dog'),(3, 'Mike T.', 'Sarah H.')])
难道只能写成这样吗:
insert into A values(**********),(*************),(*****************)
但是这种方法及麻烦而且还不快
后发现了copy_from()这个神奇的方法!
在参考:https://blog.csdn.net/rongyongfeikai2/article/details/17935139 这位仁兄的博客后一直失败,提示缺少字段.这就很难受了,查阅所有百度的资料无解,大部分都是来回抄袭,毫无新意,这里又忍不住要吐槽百度了.
只能去Google看看了,进入pg的官网才豁然开朗
http://initd.org/psycopg/docs/cursor.html
COPY_FROM说明: copy_fromfiletablesep ='\ t'null ='\\ N'size = 8192columns = None 
类似文件的目标文件中读取数据将它们附加到名为table的表中
  • file - 从中读取数据的类文件对象。它必须具有 read()readline()方法。
  • table - 要将数据复制到的表的名称。
  • sep - 文件中预期的列分隔符。默认为选项卡。
  • null - NULL文件中的文本表示。默认为两个字符串\N
  • size - 用于从文件中读取的缓冲区的大小。
  • columns - 可以使用要导入的列的名称进行迭代。长度和类型应与要读取的文件的内容相匹配。如果未指定,则假定整个表与文件结构匹配。

例:
import StringIO
>>> f = StringIO("42\tfoo\n74\tbar\n") 
>>> cur.copy_from(f, 'test', columns=('num', 'data')) 
>>> cur.execute("select * from test where id > 5;") 
>>> cur.fetchall() [(6, 42, 'foo'), (7, 74, 'bar')]

注意:

表的名称未引用:如果表名包含大写字母或特殊字符,则必须使用双引号引用:

cur.copy_from(f, '"TABLE"')

不得不说上面哪位仁兄的不严谨性了,在批量插入的每个数据之间用<\t>分割,在一条数据的末尾用<\n>分割.

附本人代码段:

tap = (indent_num, it.get(u'商品编码'),it.get(u'商品名称'),it.get(u'批发价'),it.get(u'零售指导价'),it.get(u'需求量'),it.get(u'订购量'),it.get(u'金额'),it.get(u'预计盈利'),cigarette_price)
values_list.append('\t'.join(tap))
s = ''
for value in values_list:
s += value + '\n'
cur = self.conn.cursor()
try:
# cur.executemany(insert_sql)
cur.copy_from(StringIO.StringIO(s), table,
columns=('indent_num', 'commodity_code', 'commodity_name', 'rade_price', 'guidance_price',
'requirement', 'order_quantity','amount_of_money','wholesale_price','cigarette_price'))
except Exception as e:
raise e
finally:
self.conn.commit()
print 'done'

postgresql批量插入copy_from()的使用的更多相关文章

  1. 2017.9.15 postgresql批量插入造成冲突后执行更新

    参考来自:https://stackoverflow.com/questions/40647600/postgresql-multi-value-upserts/46233907#46233907 1 ...

  2. postgresql优化数据的批量插入

    原文:http://www.cnblogs.com/mchina/archive/2012/08/11/2537393.html 有以下几种方法用于优化数据的批量插入. 1. 关闭自动提交:      ...

  3. MyBatis魔法堂:Insert操作详解(返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解   其属性如下: parameterType  ...

  4. 一条insert语句批量插入多条记录

    一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName,  ...

  5. spring data jpa开启批量插入、批量更新

    spring data jpa开启批量插入.批量更新 原文链接:https://www.cnblogs.com/blog5277/p/10661096.html 原文作者:博客园--曲高终和寡 *** ...

  6. MyBatis :Insert (返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二.insert元素 属性详解   其属性如下: parameterType , ...

  7. 聊聊编程开发的数据库批量插入(sql)

    这里的批量插入,主要是支持SQL的大型存储数据库,本文以Mysql,Oracle,SqlServer,postgresql4类来说明,这大概是国内应用比较多的了.其余的应该可以按照这些去找.提到编程的 ...

  8. 2017.7.7 postgreSQL在插入造成重复时执行更新

    参考来自:https://stackoverflow.com/questions/1109061/insert-on-duplicate-update-in-postgresql/1109198#11 ...

  9. FreeSql (六)批量插入数据

    var connstr = "Data Source=127.0.0.1;Port=3306;User ID=root;Password=root;" + "Initia ...

随机推荐

  1. HCNA Routing&Switching之PPPoE协议

    前文我们了解了广域网中的HDLC和PPP协议相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15174240.html:今天我们来聊一聊PPPoE协议相 ...

  2. NOIP 模拟 $27\; \rm 牛半仙的妹子Tree$

    题解 \(by\;zj\varphi\) 很妙的虚树题. 考虑若没有操作 \(2\),那么直接记录一下扩散到它的最短时间和询问时间相比即可,可以当作一个树上最短路. 有 \(2\) 操作怎么办,将操作 ...

  3. Linux初探之如何查看帮助文档自学命令

    linux命令种类繁多,参数各异,要每个都记住除非是过目不忘的神人,否则你只能记住常用的那几个,等到 要用时还是得靠--help,man,info这些命令去读文档,可是这些文档看起来也不那么直观,所以 ...

  4. 刷题-力扣-518. 零钱兑换 II

    518. 零钱兑换 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change-2/ 著作权归领扣网络所有.商业转载 ...

  5. nacos配置

    server: port: 3377 spring: application: name: nacos-config-client cloud: nacos: discovery: #nacos 服务 ...

  6. Qt中QOpengl的QMatrix4x4矩阵作用原理以及使用方法

    1.矩阵具有坐标变换的作用,例如:左乘一个旋转矩阵,实现点的坐标旋转,左乘一个平移矩阵实现,点的平移 2.一个点可以同时串联相乘几个变换矩阵,实现坐标连续变换,根据左乘规则,右边矩阵先作用于点,作用顺 ...

  7. 第17章-x86-64寄存器

    不同的CPU都能够解释的机器语言的体系称为指令集架构(ISA,Instruction Set Architecture),也可以称为指令集(instruction set).Intel将x86系列CP ...

  8. Kubernetes-Pod介绍(-)

    前言 本篇是Kubernetes第四篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战.从现在开始都是重要的核心概念,此篇偏一些Pod的概念介绍,后续每篇都会有实战. Kubernetes系列 ...

  9. 20210716考试-NOIP16

    考场时Prim的 $i$ 写成 $k$ 100->0 rank1->rank23 T1 Star Way To Heaven 考场正解:假设你要二分答案,则几个圆组成几道"屏障& ...

  10. 《Go语言圣经》阅读笔记:第二章程序结构

    第二章 程序结构 2.1 命名 在GO语言中,所有的变量名.函数.常量.类型.语句标号.包名都遵循一个原则: 名字必须以字母或者下划线开头,后面紧跟任意数量的字母数字下划线.区分大小写. 在GO语言中 ...