将数据框架写入postgres数据库[英] Writing dataframe to postgres database

本文是小编为大家收集整理的关于将数据框架写入postgres数据库的处理方法,想解了将数据框架写入postgres数据库的问题怎么解决?将数据框架写入postgres数据库问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我想将pandas dataframe写入Postgres表.我与DB连接如下:

import psycopg2
import pandas as pd
import sqlalchemy

def connect(user, password, db, host='localhost', port=5432):
    '''Returns a connection and a metadata object'''
    url  = 'postgresql://{}:{}@{}:{}/{}'
    url = url.format(user, password, host, port, db)

    # The return value of create_engine() is our connection object
    con = sqlalchemy.create_engine(url, client_encoding='utf8')

    # We then bind the connection to MetaData()
    meta = sqlalchemy.MetaData(bind=con, reflect=True)

    return con, meta

con, meta = connect('user_name', 'password', 'db_name', host='host_name')

当我从已经填充的表中阅读时,它可以正常工作:

df = pd.read_sql("SELECT * FROM db.table_name limit 10",con=con)
print df

我希望能够将DF写入表.为了进行测试,我有一个临时表,称为"测试",带有两个字段名称和年龄.

# create a temp df
table = [['name', 'age'], ['nameA' , 20], ['nameB', 30]]
headers = table.pop(0)
df = pd.DataFrame(table, columns=headers)
# write to db
df.to_sql('db.test', con, if_exists = 'replace', index=False)

i然后检查温度表是否填充:

df = pd.read_sql("SELECT * FROM db.test limit 10",con=con)
print df

我得到一个空的数据框!当我使用df.to_sql时,我没有错误,但是没有写入数据库(?).我缺少什么,我该如何解决?

版本:

Pandas: 0.19.2
Sqlachemy: 1.1.10
Postgres: 9.4.9

推荐答案

我没有弄清楚为什么df.to_sql没有写入表.使用pd.io.sql.SQLDatabase写入表,适用于我的测试案例:

meta = sqlalchemy.MetaData(con, schema='db_name')
meta.reflect()
pdsql = pd.io.sql.SQLDatabase(con, meta=meta)
pdsql.to_sql(df, 'test', if_exists='replace')

我不会认为这是解决方案 - 我很乐意接受更好的解决方案或一个答案,该解决方案使df.to_sql()不按预期行事而结束.

本文地址:https://www.itbaoku.cn/post/1764104.html