1.前言:

将测试数据全部敲入数据库非常繁琐,而且如果与合作伙伴一起开发,部署,那么他们肯定也不想把时间花在一个一个录入数据的繁琐过程中,这时候,创建一个批量录入数据的脚本(population script)就非常有必要。

2.代码:

假设在models.py中定义的数据为下面:

from django.db import models

# Create your models here.

class Category(models.Model):

name=models.CharField(max_length=128,unique=True)

class Meta:

verbose_name_plural="Categories"

def __str__(self):

return self.name

class Page(models.Model):

category=models.ForeignKey(Category,on_delete=models.CASCADE)

title=models.CharField(max_length=128)

url=models.URLField()

views=models.IntegerField(default=0)

def __str__(self):

return self.title

populate.py如下(仅供参考):

import os

# In your live server environment, you’ll need to tell your WSGI application what settings

# file to use. Do that with os.environ:

#reference source:https://docs.djangoproject.com/en/3.1/topics/settings/

os.environ.setdefault('DJANGO_SETTINGS_MODULE','tango_with_django_project.settings')

import django

django.setup()

from rango.models import Category,Page

#If you’re using components of Django “standalone” – for example, writing a Python script

# which loads some Django templates and renders them, or uses the ORM to fetch some data –

# there’s one more step you’ll need in addition to configuring settings.

# After you’ve either set DJANGO_SETTINGS_MODULE or called configure(), you’ll need to call

# django.setup() to load your settings and populate Django’s application registry.

# reference source:https://docs.djangoproject.com/en/3.1/topics/settings/

def populate():

python_pages=[

{"title":"official",

"url":"http://docs.python.org"},

{"title":"How to think like a computer scientis",

"url":"http://ww.greenteapress.com/thinkpy"},

{"title":"learn python in 10 minites",

"url":"http://www.korokithakis.net/tutorials/python"}

]

django_pages=[

{"title":"Official Django tutorial",

"url":"https://docs.jangoproject.com/en/1.9/intro"},

{"title":"Django Rocks",

"url":"http://www.djangorocks.com"

},

{"title":"HOw to tango with django",

"url":"http://www.tangowithdjango.com"}

]

other_pages=[

{"title":"Bottle",

"url":"http://bottlepy.org"},

{"title":"Flask",

"url":"http://flask.pocoo.org"},

{"title":"Bold test",

"url":"http://boldtest.org"}

]

cats={"Python":{"pages":python_pages},

"Django":{"pages":django_pages},

"Other Frameworks":{"pages":other_pages}}

def add_page(cat,title,url,views=0):

p=Page.objects.get_or_create(category=cat,title=title,url=url,views=views)[0]

# p.url=url

# p.views=views

p.save()

return p

def add_cat(name):

c=Category.objects.get_or_create(name=name)[0]

c.save()

return c

for cat,cat_data in cats.items():

c=add_cat(cat)

for p in cat_data['pages']:

add_page(c,p["title"],p['url'])

for c in Category.objects.all():

for p in Page.objects.filter(category=c):

print("-{0}-{1}".format(str(c),str(p)))

if __name__=="__main__":

print("starting rango population script")

populate()

3.代码要点

(1)在独立运行django的代码时,而不是通过 python manage.py runserver的方式运行时,必须使用django.setup()来引入Django项目的设置,而在引入设置之前还要指明 环境变量DJANGO_SETTINGS_MODULE用的是本项目的settings。

设置环境变量在python中常用os.environ,它返回一个字典类型,里面包含了所有环境变量的键值对,所以在这里使用字典的内置方法setdefault,将环境变量

'DJANGO_SETTINGS_MODULE' 设置为'tango_with_django_project.settings'(本项目的settings.py)。

参考:https://docs.djangoproject.com/en/3.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE

get_or_create(defaults=None, **kwargs)

A convenience method for looking up an object with the given kwargs (may be empty if your model has defaults for all fields),

creating one if necessary.

Returns a tuple of (object, created), where object is the retrieved or created object and created is a boolean specifying whether a new

object was created.

This is meant to prevent duplicate objects from being created when requests are made in parallel, and as a shortcut to boilerplatish code.

在这里,需要注意的是,如果在创建model instance时,仅在model有默认值的情况下可以不输入任何kwargs,否则必须至少输入一个值(field,如这里page的category,或者Category的name),然后该方法会带着这个值先去找有没有该值下的model instance,如果没有则创建一个新的,返回(object,created),这里object 是新创建的对象的reference,created为True.

4.运行查看

运行python populate.py:

然后登陆admin页面查看:

可以看到,数据全部被读入数据库。

python批量创建实例_Django批量创建Model实例相关推荐

  1. python运行一个项目_Django 项目创建到启动(最全最详细的第一个项目)

    一.前言 (一).概述 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...

  2. python如何启动前端_Django项目创建到启动详解(最全最具体)

    一.前言 (一).概述 Python下有许多个不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网址和APP都使用Django. Django是一个开放源码的Web应用框架, ...

  3. 用python设计学生管理系统_Django实现学生管理系统实例分享

    首页 添加 {% block content %} {% endblock %}

  4. python迅雷sdk_Python批量创建迅雷任务及创建多个文件

    其实不是真的创建了批量任务,而是用python创建一个文本文件,每行一个要下载的链接,然后打开迅雷,复制文本文件的内容,迅雷监测到剪切板变化,弹出下载全部链接的对话框~~ 实际情况是这样的,因为用py ...

  5. php生成迅雷批量下载,Python批量创建迅雷任务及创建多个文件

    #coding=utf-8 ''' Created on 2012-5-29 @author: xiaochou ''' import os import time def nsfile(s): '' ...

  6. 在ArcMap中批量创建文本框批量输出PDF

    先发下牢骚,由于某个家长不负责任的行为导致我家这片区域的小孩上了一个星期的网课... 神兽在家,除了上网课,小奔运动打卡,写字和计算练习当然也要安排上 出计算练习题当然也不可能手写,刚好以前做土地确权 ...

  7. django 批量创建bulk_create和批量更新bulk_update

    一.为什么要用bulk_create和bulk_update 以创建1万个对象为例,相比save() 循环和save() 事务,bulk_效率是save()循环保存的百倍,是事务处理的近10倍: # ...

  8. SAP MM MB21 创建预留界面批量为多个行项目勾选M标记

    SAP MM MB21 创建预留界面批量为多个行项目勾选M标记 MB21创建界面,M标记由于后台设置不能自动勾选, 如下方式可以为这三个item批量同时手工勾上M标记, Next, 2018-11-2 ...

  9. shell脚本第一篇——自定义创建用户和批量创建用户

    shell脚本第一篇--自定义创建用户和批量创建用户 1.用shell脚本建立Linux用户 # vim /root/user.sh #!/bin/bash #通过脚本自定义创建用户 read -p ...

最新文章

  1. 机器学习概念 — 线性感知机、线性回归、单个神经元、多层次神经元
  2. linux tmux离线安装,linux环境下安装tmux
  3. Asp.Net下通过切换CSS换皮肤
  4. python语言有什么用-Python到底有什么用?为什么那么多人都在学Python?
  5. Eureka常用配置详解
  6. 一个最简单的 Github workflow 例子
  7. Kitten编程猫的工程文件 bcm,能发布成Android平台的apk文件吗
  8. 30分钟,让你成为一个更好的程序员
  9. 此计算机到未能识别网络连接,本地连接显示“未识别的网络”
  10. 不光荣的“革命”——“甘露之变”后的晚唐政治
  11. 初中生物教师资格证经验贴
  12. 浅谈MATLAb中imcrop()函数
  13. python爬取携程旅游_「携程网 机票」使用requests爬取携程网飞机票价格实例 - seo实验室...
  14. 新闻文本分类学习笔记
  15. MySQL 数据库基础(1)
  16. vue加载动画element ui V-loading属性 踩坑记录
  17. 介绍一款Oracle的利器小工具-SQLcl
  18. get方式传json参数的一种方法
  19. ThinkPhp6+Vue外贸进出口后台管理系统源码
  20. 多媒体会议室系统有哪些功能,小型会议室系统解决方案

热门文章

  1. SparkSQL实践
  2. 大数据可视化的三大误区
  3. LocalDatetime与Date、timestamp互相转化
  4. php网站本地调试工具,php本地调试工具-php/asp网站程序本地调试工具下载 v5.1--pc6下载站...
  5. 中秋祝福网页制作_幼儿园中秋节活动方案(附环创)
  6. 用python输出200以内的素数_Python练习题 008:打印101-200之间的所有素数
  7. 金蝶osf接口开发_解决SaaS间的数据孤岛,实现SaaS数据接口集成互通互联
  8. mybatis map里面传对象_关于 MyBatis,我死磕了 10 种超好用的写法
  9. AcWing 866. 试除法判定质数(素数判定)
  10. linux定时执行任务命令,crontab(linux下定时执行任务命令)