【发布时间】:2019-07-09 03:16:15
【问题描述】:
我正在尝试将数据从 excel 文件传输到我的 sqlite3 数据库中的多对多表中。
模型.py
from django.db import models
class Major(models.Model):
name = models.CharField(max_length=30, db_index=True)
class School(models.Model):
name = models.CharField(max_length=50, db_index=True)
majors = models.ManyToManyField(Major)
class professor(models.Model):
ProfessorIDS = models.IntegerField()
ProfessorName = models.CharField(max_length=100)
ProfessorRating = models.DecimalField(decimal_places=2,max_digits=4)
NumberofRatings = models.CharField(max_length=50)
#delete major from the model
school = models.ForeignKey(School , on_delete=models.CASCADE)
major = models.ForeignKey(Major , on_delete=models.CASCADE)
def __str__(self):
return self.ProfessorName
填充脚本
# populate.py, school_major_link
import os
import django
from django_xlspopulator.populator import Populator
os.environ.setdefault('DJANGO_SETTINGS_MODULE','blog_project.settings')
django.setup()
from locate.models import Major
pop = Populator('C:/Users/David/Desktop/db_setup/School_Majors.xlsx', school_majors)
pop.populate()
尝试运行脚本时的错误消息
Traceback (most recent call last):
File "populate_school_major.py", line 9, in <module>
pop = Populator('C:/Users/David/Desktop/db_setup/School_Majors.xlsx', school_majors)
NameError: name 'school_majors' is not defined
但这是有道理的,因为此脚本在模型部分中查找类名而不是表名,所以我不太确定如何填充正确的表,请注意我已经有一个已使用此脚本填充的名为 majors 的表,但是由于 django 通过变量与单独的类建立多对多关系,所以我被卡住了。
我尝试使用上面的填充脚本,但注意到这不起作用,因为它正在定位类,而不是数据库表保存为什么。 (在 sqlite3 中,majors manytomanyfield 的表名称为 school_majors)。
如果有人对我如何填充数据库有任何建议,那就太好了。
【问题讨论】:
-
如果您使用 csv 文件会更容易。和熊猫 csv 阅读器..
标签: django python-3.x django-models sqlite