티스토리 뷰

INTRO

Django model 생성 후 다수 DB를 생성할 때 csv를 이용하면 수월하다

DB Browser SQLite를 통해 csv export(csv 내보내기)도 가능

 

view request 기반 model manager(model.object.create)를 이용

DB 생성하고자하는 app의 views.py를 이용 : ORM path 용이
views.py
from django.shortcuts import render
from [Your-App].models import [model_name]
from .data.csv_to_db_run import csv_to_db


# Create your views here.
def test_csv_to_db(request):
	csv_to_db([model_name])
	datas = [model_name].objects.all()
	ctx = {'datas':datas}
	return render(request, '[Your-tempates-name]/test_csv_to_db_view.html', ctx)

 

[Your-App]/data/csv_to_db_run.py
import csv
import os, sys
import django

def csv_to_db(django_model):
	os.environ.setdefault("DJANGO_SETTINGS_MODULE", "[Your-Project].settings")
	django.setup() 
	csv_path = '/[Your-Project]/[Your-App]/data/csv_to_db.csv'
	with open(csv_path, newline='') as f_csv:
		row_dics = csv.DictReader(f_csv)
		for row in row_dics: 
			print(row)
			django_model.objects.create(
				id             = row['id'], 
                # ForeignKey의 경우 field명 뒤에 _id 입력
				[Your-Field_1]_id   = row['[Your-Field_1]_id'], 
                # ForeignKey 외 field명 입력
				[Your-Field_2]      = row['[Your-Field_2]'], 
				....
			)

 

csv_to_db.csv 형식
id [Your-Field_1]_id [Your-Field2] ...
... ... .... ...
5 P00001-20211205 1 ...
6 P00001-20211206 1 ...

 

Template View
[Your-template-name]/test_csv_to_db_view.html

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
    </head>

    <body>
        <main>
            <div >
                TestBoard
                <p>{{ datas }}</p>
            </div>
            <div>
                Table Test
                <table>
                    <thead>
                        <tr>
                            <th>id</th>
                            <th>[Your-Field_1]_id</th>
                            <th>[Your-Field_1]</th>
                        </tr>
                    </thead>
                    <tbody>
                    {% for data in datas %}
                        <tr>
                            <td>{{ data.id }}</td>
                            <td>{{ data.field_1 }}</td>
                            <td>{{ data.field_2 }}</td>
                        </tr>
                    {% endfor %}
                    </tbody>
                </table>      
            </div>
        </main>
    </body>
</html>

 

 

http://localhost:8000/[Your-App]/test_csv_to_db/

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함