Django外鍵構(gòu)建及數(shù)據(jù)批量更新

1. 參考Django官方文檔 外鍵構(gòu)建 https://docs.djangoproject.com/zh-hans/3.2/ref/models/fields/#django.db.models.ForeignKey

2. 構(gòu)建模型

# models.py 
from django.db import models

# Create your models here.

class Artist(models.Model):
    name = models.CharField(max_length=10)
    ISSN = models.CharField(max_length=20)
    ImpactFactor = models.CharField(max_length=10)

class Album(models.Model):

    artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
    JournalName = models.CharField(max_length=20)

3. 無(wú)外鍵數(shù)據(jù)庫(kù)數(shù)據(jù)批量上傳 (此處只提供了關(guān)鍵代碼)

from polls.models import Artist, Album

data = Artist.objects.all()
data.delete()

artist_batch_data = [ ]
issn_to_artist_id = {}
journal_set = set()
issn_set = set()
artist_id = 0
album_id = 0
with open(Journal_file) as f:
    f.readline()
    for line in f:
        issn, journal_name, journal_abbr, impact_factor, h_index, altmetric = line.strip().split('\t')
        if issn_to_artist_id.get(issn):
            artist_id = issn_to_artist_id[issn]
        else:
            issn_to_artist_id[issn] = len(issn_to_artist_id)
            artist_id = issn_to_artist_id[issn]

        artist_batch_data.append(Artist(name=journal_name,
                                        ISSN=issn,
                                        ImpactFactor=impact_factor,
                                        id=artist_id))
        journal_set.add(journal_name)
        issn_set.add(issn)

Artist.objects.bulk_create(artist_batch_data)
print(f'JournalInfo data size: {artist_id:,}')

  1. 有外鍵的數(shù)據(jù)庫(kù)數(shù)據(jù)更新
data = Album.objects.all()
data.delete()

journal_list = list(journal_set)[:10]
issn_list = list(issn_set)[:3]

album_batch_data = [ ]
for idx, journal_name in enumerate(journal_list):

    issn = issn_list[idx%3]
    artist_id = issn_to_artist_id[issn]
    album_batch_data.append(Album(artist_id=artist_id,
                                  JournalName=journal_name))

Artist.objects.bulk_create(album_batch_data)
表格結(jié)構(gòu)
外鍵配置

4. 后記

(1)該文章記錄的是一對(duì)多數(shù)據(jù)庫(kù)外鍵構(gòu)建,及artist_id可重復(fù)
(2)migration自動(dòng)構(gòu)建的數(shù)據(jù)庫(kù)如下

包含外鍵設(shè)置的sqlite3數(shù)據(jù)庫(kù)結(jié)構(gòu)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容