【问题标题】:How to insert a pandas dataframe into an existing postgres sql database?如何将 pandas 数据框插入现有的 postgresql 数据库?
【发布时间】:2020-11-09 07:21:10
【问题描述】:

我有一个这样的数据框

index  userID    OtherIDs
0   abcdef2035  [test650, test447, test968, test95]
1   abcdef3007  [test999, test992, test943, test834]
2   abcdef2006  [test175, test996, test986, test965]
3   abcdef2003  [test339, test968, test87, test678]
4   abcdef3000  [test129, test99, test921, test909]

生成此数据帧的代码将每天运行。我需要将此上传到现有数据库中的表名“结果”。我必须检查表“结果”是否存在,如果存在,请使用上述数据框中的当前值删除/覆盖这些值。

postgres 数据库的信誉:

PGHOST = 'localhost'
PGDATABASE = 'TestDB'
PGUSER = 'postgres'
PGPASSWORD = 'admin1234'

【问题讨论】:

  • 你试过了吗?请包括您当前的代码。另外,你为什么在这里添加你的用户名和密码?这不应该与您的问题有任何关系。

标签: python sql postgresql dataframe


【解决方案1】:

您可以使用 SQLAlchemy:(https://docs.sqlalchemy.org/en/14/core/engines.html)

熊猫 df.to_sql: (https://pandas.pydata.org/pandas-docs/version/0.23.4/generated/pandas.DataFrame.to_sql.html)

假设数据框名称为df

from sqlalchemy import create_engine
engine = create_engine(user:password@host_ip:port/postgres_database)
df.to_sql('results', schema='<schema_name>', con = engine, if_exists='replace')

只需以正确的格式传递您的凭据。即engine = user:password@host_ip:port/postgres_database

构造引擎字符串: 假设以下 sign_in 变量:

sign_in = {
  "database": "TestDB",
  "user": "postgres",
  "password": "<your_password>",
  "host": "localhost",
  "port": "<your_port>"
}

signin_info = 'postgresql+pygresql://'+sign_in['user']+':'+sign_in['password']+'@'+sign_in['host']+':'+sign_in['port']+'/'+sign_in['database']

from sqlalchemy import create_engine
engine = create_engine(signin_info)

df.to_sql('results', schema='<schema_name>', con = engine, if_exists='replace')

【讨论】:

    猜你喜欢
    • 2016-01-26
    • 2017-04-01
    • 2014-12-29
    • 2021-02-27
    • 2017-03-27
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    相关资源
    最近更新 更多