Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从.csv文件创建数据库对象的最佳实践_Javascript_Python_Reactjs_Django_Django Rest Framework - Fatal编程技术网

Javascript 从.csv文件创建数据库对象的最佳实践

Javascript 从.csv文件创建数据库对象的最佳实践,javascript,python,reactjs,django,django-rest-framework,Javascript,Python,Reactjs,Django,Django Rest Framework,我的情况是:使用带有一些列的.csv文件,例如姓名、姓氏、年龄、活动和其他我想在我的关系数据库中创建对象,其中行是单个对象。列名对应于模型字段,并且其他是由创建.csv的用户定义的多个列(那些其他列位于模型字段注释中,用逗号分隔)。拥有关系数据库,基于model_1的对象,我创建了model_2和model_3,所有这些都包含这个.csv文件中的信息 我的项目基于django rest框架和react 到目前为止,我的解决方案是使用react分析.csv文件,使用FileReader和readA

我的情况是:使用带有一些列的.csv文件,例如
姓名、姓氏、年龄、活动和其他
我想在我的
关系数据库中创建对象,其中
是单个对象。列名对应于模型字段,并且
其他
是由创建.csv的用户定义的多个列(那些
其他
列位于模型字段
注释
中,用逗号分隔)。拥有关系数据库,基于
model_1的
对象,我创建了
model_2
model_3
,所有这些都包含这个.csv文件中的信息

我的项目基于
django rest框架
react

到目前为止,我的解决方案是使用react分析.csv文件,使用
FileReader
readAsArrayBuffer
,这在大多数情况下都起到了作用

使用
react
我不仅要分析文件,还要使用axios对每一行进行至少3次发布。顺序投递并非一直都很理想

我的问题是:>应该在前端还是后端分析文件

使用
python
在后端完成它似乎容易得多,但可能有更好的解决方案,我想不出

编辑: 我使用的数据库是
postgresql

Csv文件大小可以达到6000行。有了这么多行,我完全可以在react的帖子上快速浏览。另外,使用文件发布一篇文章来处理django的工作也可能导致服务器响应超时

编辑2:

例如.csv文件,可能是6k行或更长

name,surname,activity,comment,Add_1,Add_2
franko1,romano2,asd1,smth1,1,2
franko2,romano3,asd2,smth2,2,3
franko3,romano4,asd3,smth3,3,4
franko4,romano5,asd4,smth4,4,5
franko5,romano6,asd5,smth5,5,6
franko6,romano7,asd6,smth6,6,7
franko7,romano8,asd7,smth7,7,8
franko8,romano9,asd8,smth8,8,9
franko9,romano10,asd9,smth9,9,10
示例模型:

类用户(models.Model):
name=models.CharField()
姓氏=models.CharField()
类客户端(models.Model):
user=models.ForeignKey(用户)
activity=models.CharField()
类返回(models.Model):
client=models.ForeignKey(客户端)

comment=models.CharField()我会使用pandas,因为它最容易快速处理CSV文件

将熊猫作为pd导入
从my_app.models导入用户、客户端和返回
def将_csv_转换为_模型(csv_abs_路径):
df=pd.read\u csv(csv\u abs\u路径)
df['users']=df.apply(lambda行:users(name=row['name'],姓氏=row['name']),axis=1)#axis=1表示apply将按行和列运行
df['clients']=df.apply(lambda行:客户端(user=row['users'],activity=row['activity']),axis=1)
df['returns']=df.apply(
lambda行:返回(client=row['clients'],comment=f'{row.comment}{row.Add_1}{row.Add_2}'),axis=1)
cols_to_models={'users':用户,'clients':客户端,'returns':returns}
对于模型,col in cols_to_models.items():
#将objs的列转换为列表,然后批量创建它
objs=df[col].tolist()
#忽略冲突将忽略跳过已存在的对象
model.objects.bulk\u create(objs,ignore\u conflicts=True)
我不太明白您想要通过Returns and comments列实现什么,所以我加入了注释,添加了_1,并将_2列添加到一个字符串中作为注释,您可以根据需要进行修改

此外,以复数形式调用Django模型不是常见的做法,您应该:

类用户(models.Model):
name=models.CharField()
姓氏=models.CharField()
类客户端(models.Model):
user=models.ForeignKey(用户)
activity=models.CharField()
类返回(models.Model):
client=models.ForeignKey(客户端)
comment=models.CharField()

您使用哪种数据库?@JuConte Postrgresql您能提供csv和模型的示例吗?@yovelcohen您好!签出我的第二次编辑