添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

使用psycopg2将一下DataFrame的数据,插入到PostgreSQL的某个模式中,具体方法如下:

import numpy as np
import pandas as pd
import psycopg2
# 根据传入的DataFrame和数据表名,在xxx模式中新建表以及插入数据
# 默认新建的表字段类型全是int,插入数据类型均为s
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)
# 根据传入的DataFrame和数据表名,在upload模式中新建表以及插入数据
# 默认新建的表字段类型全是text,插入数据类型均为s -- 根据需求进行修改!
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