将Pandas DataFrame保存到Django模型

Joh*_*han 9 python django pandas

我有一个存储在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
Run Code Online (Sandbox Code Playgroud)

我想将它保存在Django模型中,它看起来像这样(匹配列名):

class HistoricalPrices(models.Model):
    ticker = models.CharField(max_length=10)
    date = models.DateField()
    tsr = models.DecimalField()
    close = models.DecimalField()
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Ste*_*fan 16

使用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)
Run Code Online (Sandbox Code Playgroud)