Django上传CSV文件到数据库
在开发Web应用程序时,有时候我们需要向数据库中批量导入数据,而CSV文件是一种常见的数据格式。在Django中,我们可以通过上传CSV文件的方式来将数据批量导入到数据库中。本文将介绍如何使用Django实现上传CSV文件并将数据存储到数据库中的方法。
创建Django项目
首先,我们需要创建一个Django项目。如果你已经有一个Django项目,可以直接跳过这一步。
- 创建一个Django项目
django-admin startproject myproject
- 进入项目目录
cd myproject
创建Django应用
接下来,我们需要创建一个Django应用来处理上传CSV文件的逻辑。
- 创建一个Django应用
python manage.py startapp myapp
- 在
settings.py
中注册应用
INSTALLED_APPS = [
...
'myapp',
]
创建模型
在models.py
文件中定义要存储CSV文件中数据的模型。
from django.db import models
class MyModel(models.Model):
name = models.CharField(max_length=100)
age = models.IntegerField()
然后运行迁移,创建数据库表。
python manage.py makemigrations
python manage.py migrate
创建表单
在forms.py
文件中定义一个表单,用来接收用户上传的CSV文件。
from django import forms
class UploadFileForm(forms.Form):
file = forms.FileField()
创建视图
在views.py
文件中,我们编写视图函数来处理文件上传并将数据存储到数据库中。
from django.shortcuts import render
from .forms import UploadFileForm
import csv
from .models import MyModel
def upload_csv(request):
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
file = form.cleaned_data['file']
decoded_file = file.read().decode('utf-8').splitlines()
reader = csv.DictReader(decoded_file)
for row in reader:
MyModel.objects.create(
name=row['name'],
age=row['age']
)
return render(request, 'success.html')
else:
form = UploadFileForm()
return render(request, 'upload.html', {'form': form})
创建模板
在templates
文件夹中创建两个HTML文件,一个用来显示上传表单,一个用来显示上传成功的提示信息。
upload.html
<!DOCTYPE html>
<html>
<head>
<title>Upload CSV File</title>
</head>
<body>
<h1>Upload CSV File</h1>
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<button type="submit">Upload</button>
</form>
</body>
</html>
success.html
<!DOCTYPE html>
<html>
<head>
<title>Upload Success</title>
</head>
<body>
<h1>Upload Success</h1>
<p>The CSV file has been uploaded and data has been stored in the database.</p>
</body>
</html>
配置URL
在urls.py
文件中配置URL映射。
from django.contrib import admin
from django.urls import path
from myapp.views import upload_csv
urlpatterns = [
path('admin/', admin.site.urls),
path('upload/', upload_csv, name='upload_csv'),
]
运行项目
现在我们可以运行Django项目,并访问/upload
页面上传CSV文件。
python manage.py runserver
上传CSV文件后,数据将被存储到数据库中。
通过上述步骤,我们成功地实现了使用Django上传CSV文件并将数据存储到数据库中的功能。这种方法不仅方便,而且能够快速导入大量数据,提高了开发效率。