Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- sql
- 데브코스
- 데이터 엔지니어링
- Django
- redshift
- 자료구조
- 데이터엔지니어링
- 데이터베이스
- AWS
- TIL
- 컴퓨터네트워크
- PYTHON
- 컴퓨터 네트워크
- HADOOP
- airflow.cfg
- S3
- 파이썬
- Go
- 가상환경
- 데이터 웨어하우스
- 종류
- dockerfile
- TCP
- Docker
- 데이터 파이프라인
- linux
- airflow
- 정리
- 운영체제
- http
Archives
- Today
- Total
홍카나의 공부방
[DE 데브코스] 04.24 TIL - Django 기초 본문
Django 초기 설정 과정
https://hongcana.tistory.com/29
https://hongcana.tistory.com/30
sqlite3 터미널로 접속하는 법과 관련 명령어
sqlite3 db.sqlite3
.tables # db에 존재하는 table을 찾을 수 있다.
.schema (table-name) # 해당 테이블의 스키마를 볼 수 있다.
모델 만들기(models.py)
팁 : __str__을 정의해주면 추후 쿼리셋을 사용할 때나 admin 페이지에서 객체를 손쉽게 관리 가능하다.
from django.db import models
# Create your models here.
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return f'제목: {self.question_text}, 날짜:{self.pub_date}'
class Choice(models.Model):
question = models.ForeignKey(
Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=32)
votes = models.IntegerField(default=0)
예전 migration으로 롤백
- 롤백하는 경우가 나오지 않게끔 ERD 처음부터 잘짜는게 핵심.
python manage.py migrate 0001 # 0001번으로 롤백
# 이후 apps의 models.py도 수정해주면 됨.
관리자 생성
python manage.py createsuperuser
혹은 admin page에서 Superuser, Staff 체크해주면 admin으로 승격시킬 수 있다.
admin.py에 관리할 수 있는 모델 등록하기
예시
from django.contrib import admin
from .models import *
# Register your models here.
admin.site.register(Question)
admin.site.register(Choice)
뭐 하나 잘못해서 sqlite3 DB 초기화 하기
https://hongcana.tistory.com/68
Django shell을 쓰고 싶어요
- python manage.py shell을 하면 되지만, 시각적으로 더욱 편리한 ipython을 쓰도록 하자.
- pip intsall ipython을 진행한 후, shell 명령어로 똑같이 shell을 실행하면 notebook에 가까운 UI를 가진 쉘이 등장.
- 여기서 Question.objects.all() 같은 명령어를 써서 쿼리셋을 불러오면 훨씬 시각적으로 잘 들어온다.
정참조와 역참조
- 모델에서 내가 참조하는(외래키로) 모델은 그냥 (객체이름.field이름.참조하는모델의field) 이런식으로 참조가능
- 단, 역으로 나를 참조하는 모델을 가져올 때는 역참조를 이용해야 한다.
- 역참조는 테이블명소문자_set 를 입력하면 가능하다.
- 역참조를 통해서 레코드를 만들 수도 있다. q1.choice_set.create() 이런식으로...
# example
from polls.model import Question
q1 = Question.objects.all()[0]
# Question 모델에는 Choice라는 모델을 참조할 수 있는 Field가 없는 상태이므로, 역참조
q1.choice_set
현재 시간 구하기
- time_zone은 초기 세팅때 settings.py 가서 바꾸기. 맨 위 게시글 링크 참조
from datetime import datetime
datetime.now()
shell에서 레코드 생성하기
- shell에서 새로운 객체를 만들어줘도 이를 table에 반영시키지 않으면 제대로 생성된게 아니다.
- 쉘에서 객체 생성후, save()를 잊지 말기!
from django.utils import timezone
q1 = Question("예시")
q1.pub_date = timezone.now()
q1.save()
모델 필터링
- 잘하고 있나~ 확인하고 싶을 때, 뒤에 .query를 붙여주면 SQL 문법 형식으로 뱉어줌.
from polls.models import *
# get() 메서드를 사용하여 조건에 해당하는 오브젝트를 필터링할 수 있다.
# 단, get()은 하나의 객체만 가져올 수 있다.
# 참고) pub_date 필드의 type은 datetime이다.
>> Question.objects.get(id=1)
>> q = Question.objects.get(question_text__startswith='휴가를')
>> Question.objects.get(pub_date__year=2023)
# 하나만 가져오기 싫으면 filter() 메서드를 사용하여 조건에 해당하는 오브젝트를 필터링하기
>> Question.objects.filter(pub_date__year=2023)
#쿼리셋의 SQL 쿼리 살펴보기
>>> Question.objects.filter(pub_date__year=2023).query
>>> print(Question.objects.filter(pub_date__year=2023).query)
#정규표현식을 활용하여 조건에 해당하는 오브젝트들을 필터링할 수 있음
>>> Question.objects.filter(question_text__regex=r'^휴가.*어디')
반응형
'Data Engineering > 프로그래머스 데브코스' 카테고리의 다른 글
[DE 데브코스] 04.26 TIL - Serializer (0) | 2023.04.26 |
---|---|
[DE 데브코스] 04.25 TIL - Django 템플릿 & 뷰 (2) | 2023.04.25 |
[DE 데브코스] 04.21 TIL - 야구 잘하는 팀 시각화, Seaborn, WordCloud (0) | 2023.04.21 |
[DE 데브코스] 04.20 TIL - 좋은 코드를 작성하려면?, Selenium (0) | 2023.04.20 |
[DE 데브코스] 04.19 TIL - Beautifulsoup, Locater, 알고리즘 문제 (0) | 2023.04.19 |