【发布时间】: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