- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 쉬운 파이썬
- python 중간고사
- 파이썬 강의
- 알고리즘 강의
- 파이썬 강좌
- 알고리즘 강좌
- 알고리즘
- 파이썬 알고리즘
- 중간시험
- 파이썬
- 대학시험
- 파이썬활용
- 코딩문제
- 크롤링
- Crawling
- 프로그래밍
- 코딩시험
- 파이썬3
- 파이썬 자료구조
- 기말시험
- 채용문제
- 자료구조 강의
- c언어
- selenium
- gdrive
- 면접 파이썬
- 자료구조
- python data structure
- 셀레니움
- 파이썬 입문
반원 블로그
django 모델(Model)과 데이터베이스 만들기 본문
현재 fc_community프로젝트에 board와 fuser라는 app있는 상황
1.fuser에 모델을 만들어주려고 한다.(fuser.models.py)
from django.db import models
# Create your models here.
class Fuser(models.Model): # models.Model를 상속
username = models.CharField(max_length=64,
verbose_name='사용자명' # admin 페이지에서 보일 컬럼명
)
#5~7을 드래그 한뒤 Alt+Shift+Down하면 편함
password = models.CharField(max_length=64,
verbose_name='비밀번호' # admin 페이지에서 보일 컬럼명
)
register_dttm = models.DateField(auto_now_add=True, # 자동으로 해당 시간이 추가됨
verbose_name="가입날짜"
)
#별도로 테이블명을 지정하고 싶을 때 쓰는 코드(안해도 됨)
class Meta:
db_table = 'user_define_fuser_table' #테이블 명 지정
2. 마이그레이션 생성 - manage.py를 이용
프로젝트 폴더 위치에 가서 다음 명령어를 실행(맥이라면 python3)
python manage.py makemigration
(venv) PS C:\Storage\DjangoStudy01\fc_community> python .\manage.py makemigrations
Migrations for 'fuser':
fuser\migrations\0001_initial.py
- Create model Fuser
이러면 fuser앱 안의 migrations 폴더 안에 db를 어떻게 만들어야할지 models.py를 참조해서 만들어진 initial.py에 적혀있다.
3. 실제로 db 생성 명령어 - settings.py에 있던 앱들까지 생성된다.
python manage.py migrate
(venv) PS C:\Storage\DjangoStudy01\fc_community> python .\manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, fuser, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying fuser.0001_initial... OK
Applying sessions.0001_initial... OK
4. settings.py에 있는 DATABASE를 참고하자
여기에 현재 프로젝트가 사용하는 DATABASE 세팅이 들어가며, 기본은 sqlite3로 잡혀있다.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
5. sqlite3로 만들어진 테이블을 확인하자.
그런데 sqlite3 명령어가 없으면 에러가 날 수 있다(윈도우) 그러니 sqlite3.exe를 따로준비하자. 설치링크
해당 링크에서 Precompiled Binaries for WIndows 항목에서 3번째인
sqlite-tools-win32-x86-3290000.zip을 다운받아 안에 있는 sqlite3.exe를 프로젝트 폴더에 넣어두면 된다.
(venv) PS C:\Storage\DjangoStudy01\fc_community> .\sqlite3.exe .\db.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite> .tables
auth_group django_admin_log
auth_group_permissions django_content_type
auth_permission django_migrations
auth_user django_session
auth_user_groups user_define_fuser_table
auth_user_user_permissions
스키마를 확인해보면 자동으로 id(primary key 용도) 컬럼이 생성되고, 나머지는 생성한 모델에 맞게 구성되어있다.
sqlite> .schema user_define_fuser_table
CREATE TABLE IF NOT EXISTS "user_define_fuser_table" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "username" varchar(64) NOT NULL, "password" varchar(64)
NOT NULL, "register_dttm" date NOT NULL);
sqlite를 나가려면 .q를 입력
6. 나중에 모델에서 정의한 필드가 바뀌면 다시 migrations만 하면 된다. 그러면 Alter(수정)이라는 명령구가 나온다. 만일 username의 max_length를 32로 바꾸고 저장한다음에 python manage.py migrations를 입력해보자.
from django.db import models
# Create your models here.
class Fuser(models.Model): # models.Model를 상속
username = models.CharField(max_length=32, ###64->32로 변경
verbose_name='사용자명' # admin 페이지에서 보일 컬럼명
)
#5~7을 드래그 한뒤 Alt+Shift+Down하면 편함
password = models.CharField(max_length=64,
verbose_name='비밀번호' # admin 페이지에서 보일 컬럼명
)
register_dttm = models.DateField(auto_now_add=True, # 자동으로 해당 시간이 추가됨
verbose_name="가입날짜"
)
#별도로 테이블명을 지정하고 싶을 때 쓰는 코드(안해도 됨)
class Meta:
db_table = 'user_define_fuser_table' #테이블 명 지정
(venv) PS C:\Storage\DjangoStudy01\fc_community> python .\manage.py makemigrations
Migrations for 'fuser':
fuser\migrations\0002_auto_20190903_2342.py
- Alter field username on fuser
'2018~ > Django 개인 공부 정리' 카테고리의 다른 글
django - static 폴더 관리 + js와 css 위치 (0) | 2019.09.06 |
---|---|
django - 이메일 필드 추가 (0) | 2019.09.06 |
django 회원 가입 - DataBase에 저장, 패스워드 부호화, 미입력 처리 (0) | 2019.09.04 |
django 회원가입 페이지 id 속성 변경. 프론트에서 백으로 데이터 전송 (0) | 2019.09.04 |
django 템플릿(T)와 뷰(V) 생성하고 연결하기 (0) | 2019.09.04 |
django 생성한 앱의 모델을 admin에 등록하기 (0) | 2019.09.04 |
django 어드민(admin) 페이지 처음 확인하기 (0) | 2019.09.04 |
Django 환경 세팅 절차 (0) | 2019.09.03 |