【问题标题】:Dataframe to postgresql table数据框到 postgresql 表
【发布时间】:2021-10-14 18:04:04
【问题描述】:

我需要在我们的 postgresql 表中插入一个数据帧,但是当将数据帧发送到我们的 postgresql 表时,由于某种原因它会改变行的顺序。以下代码用于将数据帧发送到我们的 postgresql 表。

def postgresql(df, table):

    # Connect to the PostgreSQL server
    engine = create_engine(f'postgresql+psycopg2://{username}:{password}@{server}:5432/{database}')
    df.to_csv("test.csv")
    # Send dataframe to PostgreSQL table in database. Replace, if already exist
    df.to_sql(table, engine, if_exists='replace', index=False)

    return df

df.to_csv("test.csv") 创建一个名为“test”的 csv 文件,该 csv 文件如下所示。请注意,标记是按顺序排列的(不是按字母顺序排列的),而数字是根据它们的标记以升序排列的:

     number   name        address         city           token
0    1        Alarm       oxstreet 12     Reading        eng
1    2        Computer    pentaroad 4     Oxford         eng
2    3        Music       thisstreet 2    London         eng
3    4        School      schoolroad 45   London         eng
4    1        Hospital    madstreet 24    Manchester     Owx
5    2        Bowling     placestreet 5   Birmingham     Owx
6    1        Hotel       cemstreet 24    Liverpool      JOC
7    2        Paintball   shootstreet 2   Manchester     JOC
8    3        Center      examstreet 24   Bristol        JOC
9    4        Computer    comproad 24     Brigthon       JOC

虽然,df.to_sql(table, engine, if_exists='replace', index=False) 会将以下内容上传到 sql 表中:

     number   name        address         city           token
0    1        Alarm       oxstreet 12     Reading        eng
1    3        Center      examstreet 24   Bristol        JOC
2    2        Computer    pentaroad 4     Oxford         eng
3    3        Music       thisstreet 2    London         eng
4    4        School      schoolroad 45   London         eng
5    1        Hospital    madstreet 24    Manchester     Owx
6    2        Bowling     placestreet 5   Birmingham     Owx
7    1        Hotel       cemstreet 24    Liverpool      JOC
8    2        Paintball   shootstreet 2   Manchester     JOC
9    4        Computer    comproad 24     Brigthon       JOC

上面是表,可以在 postgres 表上看到,这对我来说很奇怪,因为插入到 postgres 表之前的数据帧看起来与此不同,所以如何以及为什么会在postgres 表。谁有这方面的经验?也许,我应该尝试另一种插入 postgres 表的方式。我该怎么做?

【问题讨论】:

  • 我认为 SQL 默认不会对行进行排序,因此您的输出看起来并不奇怪。不过我可能是错的,所以请查看有关行顺序的 postgres 文档

标签: python pandas postgresql


【解决方案1】:

对于 SQL,顺序并不重要。您可以使用:ORDER_BY 并通过dump 将您的查询检查到 .csv 文件中。我猜你想再次对 pandas/qgis 中的查询结果进行后处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2020-09-13
    • 2018-08-13
    • 2021-10-23
    相关资源
    最近更新 更多