将Pandas DataFrame保存到Django模型

发布于 2021-01-29 15:18:36

我的股价数据存储在pandas DataFrame中,如下所示(实际上是在面板中,但是我将其转换为DataFrame)

        date  ticker  close       tsr
0 2013-03-28  abc     22.81  1.000439
1 2013-03-28  def     94.21  1.006947
2 2013-03-28  ghi     95.84  1.014180
3 2013-03-28  jkl     31.80  1.000000
4 2013-03-28  mno     32.10  1.003125
...many more rows

我想将其保存在Django模型中,该模型如下所示(与列名称匹配):

class HistoricalPrices(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    tsr = models.DecimalField()
    close = models.DecimalField()

到目前为止,我能做的最好的就是使用它来保存它,其中df是我的DataFrame:

entries = []
for e in df.T.to_dict().values():
    entries.append(HistoricalPrices(**e))
HistoricalPrices.objects.bulk_create(entries)

有没有更好的方法来保存这个?

我看过django-pandas,但是看起来它只是从数据库读取的。

关注者
0
被浏览
158
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    to_sql()与搭配使用适当的connection参数engine,然后在您的Django应用程序中运行它,而不是一次遍历DataFrame并保存一个model实例,这将是最有效的:

    from django.conf import settings
    
    user = settings.DATABASES['default']['USER']
    password = settings.DATABASES['default']['PASSWORD']
    database_name = settings.DATABASES['default']['NAME']
    
    database_url = 'postgresql://{user}:{password}@localhost:5432/{database_name}'.format(
        user=user,
        password=password,
        database_name=database_name,
    )
    
    engine = create_engine(database_url, echo=False)
    df.to_sql(HistoricalPrices, con=engine)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看