使用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")
结果如下:
版权声明:本文为The_dream1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。