如何将Pandas Dataframe写入Django模型
我一直在使用python中的pandas,通常将数据帧写入数据库表,如下所示。我现在正在迁移到Django,如何通过称为MyModel的模型将相同的数据帧写入表中?援助真的很感激。
# Original pandas code
engine = create_engine('postgresql://myuser:mypassword@localhost:5432/mydb', echo=False)
mydataframe.to_sql('mytable', engine,if_exists='append',index=True)
-
在映射到同一SQL表的Django模型旁边使用自己的熊猫代码
我不知道将熊猫数据框写入Django模型的任何明确支持。但是,在Django应用中,除了使用ORM(例如通过Django模型)之外,您仍然可以使用自己的代码来读取或写入数据库。
鉴于您极有可能在数据库中以前是由pandas’编写的
to_sql
,因此您可以继续使用相同的数据库和相同的pandas代码,只需创建一个可以访问该表的Django模型即可例如,如果您的熊猫代码正在写入SQL表
mytable
,则只需创建一个如下模型:class MyModel(Model): class Meta: db_table = 'mytable' # This tells Django where the SQL table is managed = False # Use this if table already exists # and doesn't need to be managed by Django field_1 = ... field_2 = ...
现在,您可以将Django中的该模型与现有的熊猫代码同时使用(可能在单个Django应用中)
Django数据库设置
要将相同的DB凭据获取到pandas SQL函数中,只需从Django设置中读取字段,例如:
from django.conf import settings user = settings.DATABASES['default']['USER'] password = settings.DATABASES['default']['PASSWORD'] database_name = settings.DATABASES['default']['NAME'] # host = settings.DATABASES['default']['HOST'] # port = settings.DATABASES['default']['PORT'] 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)
不建议使用替代方法,因为它效率低下
除了逐行读取数据框然后创建模型实例并保存它,我真的看不到什么方法,这确实很慢。您可能不愿进行一些批处理插入操作,但是既然熊猫
to_sql
已经为我们做到了,为什么还要打扰呢。当熊猫也可以更快地将Django查询集读取到熊猫数据框中时,这样做效率低下。# Doing it like this is slow for index, row in df.iterrows(): model = MyModel() model.field_1 = row['field_1'] model.save()