【发布时间】:2022-01-17 14:23:53
【问题描述】:
我想向我的数据库添加一个包含一些重复行的数据框,但由于我的真实数据库非常大,我不想删除现有表并使用更新的行再次添加它,因为它需要我从 API 中再次提取它
我认为正确的方法可能是 df.read_sql() 然后将结果与 df2 进行比较,然后只插入尚未存在的行
import sqlalchemy as db
import pandas as pd
engine = db.create_engine('sqlite:///test.db', echo = True)
data1 = {'Month':['June', 'July', 'August'],
'Number':[20, 21, 19]}
df = pd.DataFrame(data1)
df.to_sql("ExampleTable", engine,if_exists="append", index=False)
data2 = {'Month':['May','June', 'July', 'August', 'Septemper'],
'Number':[11, 20, 21, 19, 14, 15]}
df2 = pd.DataFrame(data2)
df2.to_sql("ExampleTable", engine,if_exists="append", index=False)
【问题讨论】:
-
“我想从 data2 中追加 data1 中不存在的月份,但按照日历的正确顺序。” 您不应该依赖存储顺序,但考虑数据库表无序集。如需订购,查询时应指定
ORDER BY子句。 -
他们不是。这是事实。获取查询时必须使用
ORDER BY子句。没有其他选择。 -
是否可以假设您要附加数据的原始表已经作为数据框存储在df1中?似乎您想在数据库中执行此操作,而不是将所有“非常大”的数据拉入数据框中。如果有两个 dfs,一个包含现有数据,一个包含现有+新数据,那么您只需获取 df2 中不存在于 df1 中的行,并将 df2 中的唯一行附加到表中。正如其他作者所说,顺序在写入时并不重要,只在读取时。请澄清以帮助确定解决方案
-
@frederick-douglas-pearce 是的,可以假设原始表已存储为数据帧,所以实际上我想要做的是将数据库作为数据帧读取,然后将其与新的数据框,然后插入不存在的内容
标签: python pandas sqlalchemy