티스토리 뷰
SQL
BD 조작언어이다. 우리는 장고를 사용할 때 ORM 으로 쓴다. Flask는 다른 ORM을 가진다.
Object = 객체(python)
Relational = DB라고 생각하자
Mapper = 위의 2개를 연결
즉, python 객체조작(method호출)으로 DB를 조작한다.
ORM은 DB와 객체사이에서 Mapping 해준다.
ORM(Object Relational Mapping)
- CRUD하기 위해 필요한 개념이 ORM
- 객체조작을 통해 DB를 조작
- 다양한 SQL에 상관없이 개발가능
- DB 조작을 python 코드로 가능
- Object 조작을 통해 데이터 베이스를 조작
Article object를 조작해보자.(Article class를 모델에 만든 후의 상황)
>pip install django-extensions ipython
위의 2개의 python 패키지를 설치하자. CLI 환경으로 넘어 갈 건데, 편하게 보기 위해서 위의 2가지를 설치한거다.
settings.py의 INSTALLED_APPS에 아래처럼 추가하자.
'django_extensions',
'articles',(app등록한 위치보다 위에 적자.)
>python manage.py shell_plus
shell_-plus의 특징은 관련된 모델들을 import 해주는게 특징이다. 주피터 노트북처럼 뜬다. 그러면 이제 DB에 저장된 게시물을 object 조작으로 사용가능하다.
+ 에러발생] ModuleNotFoundError: No module named 'django-extensions'
이러한 에러의 경우는 app을 추가할 때 django-extensions가 아니라 django_extensions 를 적어야한다. 설치이름과 등록이름이 다른 라이브러리가 있으니 주의하자.
>Article
<articles.models.Article
> Article.objects.all()
< Queryset [<Article: Article object (1)>]
유사 리스트 형태로 전체 데이터를 다 가져온다. 위에 처럼 return타입은 Queryset(유사리스트)로 Article 자체의 object가 리스트 형식으로 뜬다.
즉, ORM은 DB값을 변환해서 object로 보여준다. 변경을 하면 sqp로 바꿔서 변경을 해준다. 만약 SQL문으로 적으면 표(table) 형식으로 보여준다.
> Article.objects.all()[0].title
< 1변글의 내가 적은 title 부분이 출력된다.
> Article.objects.all()[0].content
< 1번글의 내용이 출력된다.
Article.objects.all() 뜻,
어떤 class(Article)의 쿼리 method(objects.all)를 쓰면 출력이 되고, 그것에 대은되는 SQL 문이 있다.
> python manage.py sqlmigrate articles 0001
SQL문이 뜬다 - sqlmigrate
app 이름 - articles
마이그레이션 파일 - 0001
게시판에서 글을 쓸 때 DB입장에서 어떠한 작업을 하는가??
Create | 쓰고 | 생성 |
Read | 읽고 | 조회 |
Update | 수정하고 | 수정 |
Delete | 삭제 | 삭제 |
DB를 SQL없이도 조작가능하다. 즉, 각각의 DB를 Method조작(객체조작)
CREATE(생성)
python의 인스턴스 만들기와 비슷하다고 보면 된다.
class Person()
P1 = Person()
P1.name = "hanpy"
>article = Article() : Article을 비어있는 article 변수에 저장하여 인스턴스를 만든다.
>article.title = '제목입력'
>article.content = '내용입력' : 속성값을 입력
>article
< <Article : Article object (None)> : 비어있다고 뜬거다.
>article.save() : 이렇게 저장을 해줘야한다.
>Article.object.all()
<QuerySet [<Article:Article object (1)>, <Article:Article object (2)>]> : <Article:Article object (2)>이 생성됨
>article
<Article:Article object (2)> : 실제 DB에 값이 저장되었다. 위의 흐름을 기억 할 필요가 있다.
> Article.objects.all()[1]
<Article:Article object (2)>
>Article.objects.all()[1].title
'제목입력'
READ(조회)
모든 데이터 조회
>Article.object.all()
<QuerySet [<Article:Article object (1)>, <Article:Article object (2)>]>
단일 데이터 조회
>Article.object.get(id=2)
< <Article:Article object (2)>
조회 시 주민번호, 학번, 군번 등으로 식별번호를 사용한다. (고유값)
일반적으로 id로 식별번호를 부여한다.
id는 식별번호이자 Primary key(PK)라고도 한다. DB는 중복 불가하다.
즉, 일반적으로는 Primary key라고 부르지만 column의 이름을 id라고 한다.
UPDATE(수정)
> a2 = Article.objects.get(id=2) : a2라는 변수로 가지고 온다
> a2.title = '제목수정' : 속성 변경
> a2.save() : save method 호출
> new_a2 = Article.objects.get(id=2) : 새롭게 불러오니 수정되어진걸 확인 할 수 있다.
> new_a2.title
< '제목수정'
DELETE(삭제)
> a1 = Article.objects.get(id=1)
> a1.delete() : 삭제 시 tuple이 리턴되어 나온다.
(1, {'article.Article': 1})
>Article.object.all()
<QuerySet [<Article:Article object (2)>]>
'Web > Django' 카테고리의 다른 글
[Django] Model 기초 (0) | 2020.06.28 |
---|---|
[Django] Migration (0) | 2020.06.26 |
[django] Form으로 사용자의 입력 받기+ModelForm (0) | 2020.06.22 |
[Django] CRUD_READ_상세보기(detail) (0) | 2020.06.21 |
[Django]html의 탐색 순서에 따른 오류 해결책 (0) | 2020.06.20 |
- Total
- Today
- Yesterday
- JavaScript
- typescript
- read_csv
- django
- nodejs
- react autoFocus
- react
- useState
- BFS
- logout
- mongoDB
- login
- DFS
- pandas
- error:0308010C:digital envelope routines::unsupported
- 클라우데라
- next.config.js
- Vue
- useHistory 안됨
- Python
- Queue
- NextJS
- 자료구조
- 자연어처리
- vuejs
- Deque
- UserCreationForm
- nextjs autoFocus
- Express
- TensorFlow
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |