题目
如何在Django中批量传入数据
过程
本来学习数据库的使用是不难的,难的是利用Django上传数据,搜索了太多网上教程,准确来说没有一个有用,看的我都火冒三丈,不得不说一些网友太过于省事,全部都是转载别人的文章,以至于百度搜出来的一连串的几篇文章都是一毛一样的,真是令人难受!!!
下面我来讲一下自己的心得体会,以及如何将自己csv文件上传到数据库中
第一步
你得有一个csv文件,它放在根目录上就行,【根目录就是你拖进你打开这个项目文件夹里】
第二步
在django中创建一个app
在命令行输入
python3 manage.py startapp app项目名
例如我创建了一个叫database的app项目
第三步
创建一个表,我的叫做lawdatabase
里面有两列,question和reply,此时数据库为空
第四步
在database中找到views.py
写入以下代码
def loadToDatabase(request):
# 找到csv路径
path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'database.csv')
# 使用pandas读取数据
data = pandas.read_csv(path,index_col=False)
# 存放临时数据list,相当于缓存
l = []
flag = True
# 万一读取失败,给自己一个机会,重新删除所有数据,从头开始
# LawAnswer.objects.all().delete()
if flag:
for i in range(len(data)):
d = LawAnswer(question=data.iloc[i]['question'],reply=data.iloc[i]['reply'])
l.append(d)
if i%5000==0:
print('数据正在上传中...')
flag = False
# 一并读取到数据库中,batch_size不要太大,否则会出现too many terms in compound SELECT
LawAnswer.objects.bulk_create(l,batch_size=100)
return render(request,'index.html',{"status":"数据已经上传完毕"})
然后我们借用访问index页面时进行上传,记得要导入相关库吖
def index_view(request):
if request.method == "GET":
resp = loadToDatabase(request)
return resp
之后在终端执行
python3 manage.py runserver
在网页中打开
localhost:8000/index
此时会转一会圈圈~
之后到vscode中查看数据库,发现数据库已经上传成功!
和csv一样,csv中第一行是标题
后记
哦,对了,如果想要在vscode中看到db.sqlite里的数据【可视化】
在扩展应用里找到,就可以看