일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Django
- CSS
- form
- 알고리즘 풀이
- PYTHON
- react
- Baekjoon
- Algorithm
- django widget
- 알고리즘 연습
- 파이썬
- 백준
- js
- HTML
- web
- API
- es6
- c++
- django rest framework
- MAC
- DRF
- Git
- 알고리즘 문제
- 장고
- django ORM
- 파이썬 알고리즘
- java
- AWS
- javascript
- 알고리즘
- Today
- Total
목록django ORM (9)
수학과의 좌충우돌 프로그래밍
Spanning multi-valued relationships 에 대해서 설명하기 전에 어쩌다가 해당 문제에 부딪혔는지 설명을 우선적으로 하도록 하겠습니다. 배경 설명 이번 예시에서 사용할 모델은 3개입니다. 실제로는 필드 수가 훨씬 많지만 원활한 이해를 이해 필드를 많이 줄여 적절한 예시를 만들어 보았습니다. class Sutra(models.Model): name_kor = models.CharField(max_length=255, null=True, blank=True) description = models.TextField(blank=True, null=True) def __str__(self): return self.name_kor class Evaluation(models.Model): RE..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 1. 질의 횟수 확인 Django 단위 테스트 클래스에 assertNumQueries() 메서드를 사용하여 데이터베이스에 발생하는 질의 횟수를 검증할 수 있습니다. def test_number_of_queries(self): User.objects.create(username='testuser1') # 위 ORM 명령으로 질의 횟수가 1 번 일어나야 한다. self.assertNumQueries(1) User.objects.filter(username='testuser').update(username='test1user') # 질의 횟수가 한 번 증가해야 한..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 1. 자기 참조 외래 키 자기 자신을 참조하는 자기 참조 외래 키를 정의할 수 있습니다. class Employee(models.Model): manager = models.ForeignKey('self', on_delete=models.CASCADE) class Employee(models.Model): manager = models.ForeignKey("Employee", on_delete=models.CASCADE) 2. 기존 DB를 django Model로 옮기기 Django에서 models.py를 통해 DB를 생성할 수 도 있지만 경우에 따라 기존의..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 1. QuerySet 정렬 Django에서는 order_by 메서드를 사용하여 QuerySet을 정렬할 수 있습니다. 여러 필드에 대해서도 가능하며 - 를 사용하여 내림차순으로 정렬도 가능합니다. Post.objects.all().order_by('created_at', '-updated_at') SELECT `post_post`.`id`, `post_post`.`user_id`, `post_post`.`title`, `post_post`.`content`, `post_post`.`created_at`, `post_post`.`updated_at` FROM ..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 1. 여러 개의 행을 한 번에 생성하기 여러 개의 데이터를 저장하기 위해서 create() 함수를 여러 번 쓰는 것은 비효율적입니다. DB와 연결 후 저장을 하고 연결을 끊게 되는데 쿼리가 여러 개면 이 과정을 무의미하게 반복됩니다. 따라서 저장할 데이터가 많을 경우 한 번에 저장하는게 좋습니다. Django에서는 bulk_create 를 제공해줍니다. 이 함수는 아직 저장되지 않은 객체를 담은 리스트를 인자로 받습니다. categories = [Category(name='a'), Category(name='b')] category = Category.obj..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 14. Q 객체 앞서서 Q 객체에 대해 다루었다시피 이를 통해 SQL 질의의 WHERE 절을 수행할 수 있습니다. queryset = User.objects.filter( Q(first_name__startswith='R') & ~Q(last_name__startswith='Z') ) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."first_name", "auth_user"."last_name" FROM "auth_user" WHERE ("auth_user"."first_name"::text L..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 10. JOIN SQL에서는 JOIN문을 이용해 동일한 값을 가진 열을 기준으로 두 테이블을 결합할 수 있습니다. django에서도 JOIN을 할 수 있는 방법이 존재합니다. select_related 모든 Post를 가져오는 간단한 쿼리를 살펴봅시다. post_all = Post.objects.all() 이에 대한 SQL 질의문입니다. 놀랍게도 Post에 대한 질의문과 Post와 OneToOne으로 연결되어 있는 User에 대한 질의가 함께 이루어집니다. Post가 N개 있다면 각 Post에 해당하는 User를 조회하기 위해 N번의 추가적인 질의가 이루어집..
해당 포스팅은 Django ORM CookBook 을 공부하며 새로 알게된 사실이나 더 나아가 추가적으로 같이 알면 좋을 내용을 정리하고 있습니다. 1. 장고 ORM이 실행하는 실제 SQL 질의문 확인 ORM에 대응되는 SQL 질의문을 확인하기 위해서는 다음과 같이 확인할 수 있습니다. queryset = Post.objects.all() str(queryset.query) ''' 'SELECT `post_post`.`id`, `post_post`.`user_id`, `post_post`.`title`, `post_post`.`content`, `post_post`.`kind`, `post_post`.`image`, `post_post`.`created_at`, `post_post`.`updated_at..
model 에 대한 두 번째 포스팅입니다. 저번 포스팅은 django 를 처음 공부하면서 정말 기본적인 내용에 썼다면, 이번에는 공부하면서 좀 더 필요하다고 생각이 된 부분들에 대해서 새롭게 추가해보았습니다. ORM 이란? ORM 이란 object-relational mapping 의 줄임말로서 영어 그대로 해석하면 객체의 관계를 연결해주는 것을 뜻합니다. 데이터베이스는 SQL 로 관리를 하게 되는데 DJango 같은 경우, 파이썬 코드와 SQL 를 매핑 시켜줌으로서 파이썬 코드로도 쉽게 데이터베이스를 다룰 수 있게 됩니다. 좀 더 정확히 말하자면 데이터베이스 테이블 과 models.py 의 파이썬 클래스 를 1대1로 매핑하게 됩니다. 장고의 장점 중 하나로도 ORM 기능이 지원되는 점이 뽑힐 만큼 매력..