我正在DJANGO制作一个处理很多“问题”的应用程序。模型中指定了一个问题表,将会有或多或少数千个问题。
现在,我手头有一个excel文件,所有问题都在,我可以从那里制作一个CSV文件。我只需要在问题表中获取CSV数据。 什么可能是最简单的方法呢?任何人都可以告诉任何工具,流程,代码吗?
答案 0 :(得分:1)
我使用csv
模块查看视图。以下是我如何创建大量用户的示例。这可能不是最有效的方法,但确实可以完成工作。
import csv
from django.contrib.auth.hashers import make_password
def create_bulk_user(request):
with open(os.path.join(settings.BASE_DIR, 'media', 'core', 'employees.csv')) as f:
reader = csv.reader(f)
for row in reader:
user, created = User.objects.get_or_create(
username=str(row[0]),
defaults={
'password': make_password('ddff123#'),
'first_name': ' '.join(row[1].split()[:-1]),
'last_name': str(row[1].split()[-1])
}
)
designation, created = Designation.objects.get_or_create(
name=str(row[4]), defaults={}
)
department, created = Department.objects.get_or_create(
name=str(row[3])
)
user.profile.designation = designation
user.profile.department = department
user.profile.proximity_id = str(row[2])
user.profile.save()
context = {}
return render(request, "core/create_bulk_user.html", context)
请注意,您可以使用bulk_create
方法,但我没有在此使用过。
答案 1 :(得分:1)
Django management command可能是将此数据导入数据库的最佳选择。它允许您访问Django的ORM,同时与请求/响应周期分开。您可以使用.csv文件作为参数从命令行调用它。
这是一个简单的例子。
import csv
from django.core.management import BaseCommand
from app.models import Question
class Command(BaseCommand):
help = 'Load a questions csv file into the database'
def add_arguments(self, parser):
parser.add_argument('--path', type=str)
def handle(self, *args, **kwargs):
path = kwargs['path']
with open(path, 'rt') as f:
reader = csv.reader(f, dialect='excel')
for row in reader:
question = Question.objects.create(
attr1=row[0]
attr2=row[1]
)
如果您将其保存为app/management/commands/load_questions.py
,则会将其调用为:
python manage.py load_questions --path /path/to/your/file.csv
答案 2 :(得分:0)
带有“导入”按钮的SQL客户端似乎是显而易见的选择,例如,用于SQLite的SQLiteStudio或用于MySQL的MySQL Workbench。
但是,如果那行不通,您也可以使用pandas库在一行中完成此操作:
Boundary