使用psycopg2将一下DataFrame的数据,插入到PostgreSQL的某个模式中,具体方法如下:
import numpy as np
import pandas as pd
import psycopg2
def inert_data(origin_table,mysql_table):
create_column = '('
column_type = ''
for i in origin_table.columns:
create_column = create_column + i + ' int' + ','
column_type = column_type + '%s' + ','
create_column = create_column[:-1] +')'
column_type = column_type[:-1]
print('create_column: '+ create_column)
print('column_type: '+column_type)
print()
db = psycopg2.connect(dbname='xxx',user='xxx',password='xxx',host='xxx',port=8000,\
options="-c search_path=xxx,public")
cursor = db.cursor()
create_table = 'create table if not exists ' + mysql_table + create_column
print('创库语句:' + str(create_table))
cursor.execute(create_table)
cursor.execute("delete from " + mysql_table)
print('删表语句:' + str("delete from " + mysql_table))
df = origin_table
data = tuple([tuple(i) for i in df.values])
sql = '''insert into ''' + mysql_table + ''' values (''' + column_type + ''')'''
print('插入语句:'+str(sql))
print('插入数据:'+str(data))
cursor.executemany(sql,data)
db.commit()
db.close()
df = pd.read_excel('D:/test.xlsx')
inert_data(df,"test")
爆出以下错误
解决如下:
在import 中引入如下:
from psycopg2.extensions import register_adapter, AsIs
psycopg2.extensions.register_adapter(np.int64, psycopg2._psycopg.AsIs)
最终使用如下函数:
import numpy as np
import pandas as pd
import psycopg2
from psycopg2.extensions import register_adapter, AsIs
psycopg2.extensions.register_adapter(np.int64, psycopg2._psycopg.AsIs)
def inert_data(origin_table,mysql_table):
create_column = '('
column_type = ''
for i in origin_table.columns:
create_column = create_column + i + ' text' + ','
column_type = column_type + '%s' + ','
create_column = create_column[:-1] +')'
column_type = column_type[:-1]
print('create_column: '+ create_column)
print('column_type: '+column_type)
print()
db = psycopg2.connect(dbname='xxx',user='xxx',password='xxx',host='xxx',port=8000,\
options="-c search_path=xxx,public")
cursor = db.cursor()
create_table = 'create table if not exists ' + mysql_table + create_column
print('创库语句:' + str(create_table))
cursor.execute(create_table)
cursor.execute("delete from " + mysql_table)
print('删表语句:' + str("delete from " + mysql_table))
df = origin_table
data = tuple([tuple(i) for i in df.values])
sql = '''insert into ''' + mysql_table + ''' values (''' + column_type + ''')'''
print('插入语句:'+str(sql))
print('插入数据:'+str(data))
cursor.executemany(sql,data)
db.commit()
db.close()
df = pd.read_excel('D:/qyjtest.xlsx')
inert_data(df,"test")
结果如下:
该系列暂时总共有3篇文章,连接如下
【python】爬虫篇:python连接postgresql(一):https://blog.csdn.net/lsr40/article/details/83311860
【python】爬虫篇:python对于html页面的解析(二):htt...
Python3 使用executemany()、extras和to_sql()三种方法分别实现批量数据写入postgressql数据库中
1.知识点
1)使用psycopg2模块的executemany()方法实现批量写入数据到postgresql数据库中
2)使用psycopg2模块的extras实现批量写入数据到postgresql数据库中
3)使用sqlalchemy模块的to_sql()方法实现批量写入数据到postgresql数据库中
2.各个方法的实现
1)使用psycopg2模块的execut
之前写过python连接postgresql的方法,今天在网上详细总结了一下psycopg2的使用方法
使用*.ini文件(python的configparser包可以解析这种类型的配置文件)保存数据库连接的配置信息。
使用psycopg2.connect函数获得connection对象。
使用connection对象创建cursor对象。
使用cursor对象执行sql语句提交或者回滚transaction。
使用cursor对象fetchone获得查询结果。
关闭cursor对象和connec
正常情况下往数据库多张表中批量插入1000条数据,若一条一条insert插入,则调用sql语句查询插入需要执行几千次,花费时间长
现使用cursor.executemany(sql,args) ,可对数据进行批量插入,
其中args是一个包含多个元组的list列表,每个元组对应mysql当中的一条数据
以下是实例:
往数据库中的order表、order_detail表和pay表中插入1000条订单数据,订单详情数据以及支付数据
1.pay表中的id字段是order表中的pay_id字段
2.order表中的
最近要对Postgresql数据库某表中的几百万条数据进行计算并更新某字段的值,在此期间使用过协程+aiopg,7分钟更新2000条数据,速度太慢;后来查看Psycopg2文档发现了一个高效的方法。
**安装Psycopg **
pip install psycopg2
文档中关于高效执行的描述:Fast execution helper...
有近3万条数据需要从excel中导入postgresql中。之前使用to_sql方法实现,耗时2min上下,需要做一下简单的优化。
如果使用的mysql或者时SQL Server数据库可以在配置数据连接时,添加参数fast_executemany=True。但是postgresql数据库常用的psycopg2不支持这种配置。
推荐使用psycopg2的copy_from()函数,先看代码:
# -*- coding:UTF-8 -*-
@ProjectName :
@FileNam
conn = p2.connect(user='nsc', password='xxxxx', host='10.67.1.176', port=5432)
csor = conn.cursor()
#非参数化查询
#csor.ex