亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)/技術(shù)文章
文章詳情頁(yè)

Django如何批量創(chuàng)建Model

瀏覽:128日期:2024-09-22 18:18:34

1.前言:

將測(cè)試數(shù)據(jù)全部敲入數(shù)據(jù)庫(kù)非常繁瑣,而且如果與合作伙伴一起開(kāi)發(fā),部署,那么他們肯定也不想把時(shí)間花在一個(gè)一個(gè)錄入數(shù)據(jù)的繁瑣過(guò)程中,這時(shí)候,創(chuàng)建一個(gè)批量錄入數(shù)據(jù)的腳本(population script)就非常有必要。

2.代碼:

假設(shè)在models.py中定義的數(shù)據(jù)為下面:

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 djangodjango.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.代碼要點(diǎn)

(1)在獨(dú)立運(yùn)行django的代碼時(shí),而不是通過(guò) python manage.py runserver的方式運(yùn)行時(shí),必須使用django.setup()來(lái)引入Django項(xiàng)目的設(shè)置,而在引入設(shè)置之前還要指明 環(huán)境變量DJANGO_SETTINGS_MODULE用的是本項(xiàng)目的settings。

設(shè)置環(huán)境變量在python中常用os.environ,它返回一個(gè)字典類(lèi)型,里面包含了所有環(huán)境變量的鍵值對(duì),所以在這里使用字典的內(nèi)置方法setdefault,將環(huán)境變量

’DJANGO_SETTINGS_MODULE’ 設(shè)置為’tango_with_django_project.settings’(本項(xiàng)目的settings.py)。<br>參考:<a rel='external nofollow' >https://docs.djangoproject.com/en/3.1/topics/settings/#envvar-DJANGO_SETTINGS_MODULE</a>

(2)get_or_create方法:(官方文檔定義https://docs.djangoproject.com/en/3.1/ref/models/querysets/#get-or-create如下)

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),<br> 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 <br>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. <br>

 在這里,需要注意的是,如果在創(chuàng)建model instance時(shí),僅在model有默認(rèn)值的情況下可以不輸入任何kwargs,否則必須至少輸入一個(gè)值(field,如這里page的category,或者Category的name),然后該方法會(huì)帶著這個(gè)值先去找有沒(méi)有該值下的model instance,如果沒(méi)有則創(chuàng)建一個(gè)新的,返回(object,created),這里object 是新創(chuàng)建的對(duì)象的reference,created為T(mén)rue.

4.運(yùn)行查看

運(yùn)行python populate.py:

Django如何批量創(chuàng)建Model

然后登陸admin頁(yè)面查看:

Django如何批量創(chuàng)建Model

可以看到,數(shù)據(jù)全部被讀入數(shù)據(jù)庫(kù)。

以上就是Django如何批量創(chuàng)建Model的詳細(xì)內(nèi)容,更多關(guān)于Django批量創(chuàng)建Model的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 女人大毛片一级毛片一 | 亚洲国产系列久久精品99人人 | 国产福利不卡 | 黄色淫片 | 激情婷婷网| 久久精品丝袜 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片毛片 | 偷窥自拍15p | 高清国产美女在线观看 | 首页亚洲国产丝袜长腿综合 | 亚洲欧美日韩在线精品2021 | 亚洲特一级毛片 | 欧美大片aaa | 99视频精品免视3 | 国产一区欧美 | 久久噜国产精品拍拍拍拍 | 国产精品久久久久久久久久日本 | 日韩欧美在线综合网高清 | 国产2021精品视频免费播放 | 女神穿上情趣丝袜啪啪一整晚 | 色男人的天堂 | 2022国产情侣真实露脸在线 | 久青草国产观看在线视频 | 看三级毛片 | 国产无内制服肉丝精品视频 | 欧美日韩国产58香蕉在线视频 | 一级女性全黄久久生活片 | 精品一区二区三区在线观看l | 欧美性色xxxxxbbbbb | 色综合夜夜嗨亚洲一二区 | 日本一级大黄毛片免费基地 | 黄页视频在线观看免费 | 免费国产zzzwww色 | 岛国精品在线 | 国内精品不卡一区二区三区 | 在线看片黄 | 久久国产免费 | 在线观看国产小屁孩cao大人 | 99久久一香蕉国产线看观看 | 国产ppp在线视频在线观看 | 国产精品一区二区欧美视频 |