아...힘든 하루네요.
회사에서 쓰는게 oracle 11g 2Release 32bit라서 이걸 모델로 집에서 django랑 연동 테스트 해보려고 삽질을 시작했는데... 오전 9:30분에 시작해서 지금, 오후 10:00에서야 드디어 완성했습니다. 그것도 완전한 완성이라고 볼 순 없고 부분적으로 모자란 부분이 있습니다.
오늘 최종적으로 성공한 각 프로그램/모듈의 버전은 아래와 같습니다.
oracle 11g 2Release 64bit
Python 3.6.1 64bit
Django 1.11.22
cx_Oracle 6.3
32비트고 뭐고 왔다갔다 하느라 정신없어서..64비트로 우선 통일!
안되는 영어로 계속 뒤져보니까 요즘나오는 Django 3.0이나 2.X대 버전은 oracle 11g를 지원을 안한다고 합니다. 가능한 버전이 Django 1.11.XX대 버전이라고 합니다. 문제는 얘도 Python 버전을 가리는데..최신 3.8은 안되고 2.7 ~ 3.6 까지만 된다네요.... 버전맞추기 참 힘듭니다. cx_Oracle은 나중에 알아보니 그냥 최신 깔아도 될 것 같습니다. 여기까진 그냥 고생한 내용이고..
현재는 버전에 크게 상관없이 잘 구동이 됩니다.
Django와 Oracle 연동하는 방법을 알아보겠습니다. 피곤해서 캡쳐는 생략하겠습니다. (나중에 시간나면 업뎃하는걸로..)
1. 버전 확인. 오라클과 연동할 때 같은 32bit 또는 64bit인지 꼭 확인합니다.
=> 64bit를 기본으로 깔면 32bit와 연동할 때에도 큰 문제없이 가능합니다.
2. oracle 11g와 연동할 django 1.11.22버전 설치합니다.
- pip install django~=1.11.22
(특정 버전을 골라 설치하려면 이렇게 해도 되지만, Django 3.0부터는 ASGI를 지원하므로, 굳이 구버전을 설치할 필요는 없습니다.)
3. DB연동을 위한 cx_Oracle을 설치합니다.
- pip install cx_Oracle
4. 프로젝트 생성
- django-admin startproject mysite (새로 생성되는 mysite폴더에 manage.py가 생성됩니다. 귀찮아짐..)
- django-admin startproject mysite . (마지막에 . 을 찍어주면 현재 폴더에 manage.py가 생성됩니다.)
5. 앱 생성
- python manage.py startapp polls
6. Database 접속정보 수정
7. inspectdb를 이용하여 models.py생성
- python manage.py inspectdb test>polls/models.py
- error발생 가능: TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
- Django 버전을 꼭 확인하시기 바랍니다. Django 2.0이상 버전은 oracle11g와 안맞는다네요...가끔 했다는 분들도 계신데, 그냥 고수이신걸로...ㅠㅜ
8. python manage.py migrate --fake-initial (기존 Oracle 데이터가 있을 경우 불요)
- error발생 가능: django.db.utils.DatabaseError: ORA-00955: name is already used by an existing object
- 최초 migration한 파일이 남아있을 수 있으니 지우고 다시
python manage.py makemigrations 와
python manage.py migrate --fake-initial 수행하고 진행하시기 바랍니다.
- Database 테이블이 초기화 상태이어야 합니다. 데이터가 있으면 이 에러메시지가 발생합니다. 좀 이상한데,, 데이터가 존재하는 경우 연동을 어떻게 시키는지 아시는 분께서 답글좀 달아주시면 정말 감사하겠습니다.
오전 9시30분부터 시작해서 저녁 10:00 완료하기까지 알아낸 것 치고는 별거 없네요...
Python, Django, Oracle 버전 맞춘다고 지웠다 깔았다 계속하고, 특히 오라클 지우고 3번 다시 까느라 시간 다 보내고,
Django가 쉽다는데.....너무 어렵게 시작하는 것 같은...
그럼 이만~
(ps) 2020.06.03: 기존 오라클의 데이터가 있을 경우 makemigrations와 migrate는 없어야합니다. DB정보만 잘 입력해주면, 그리고 inspectdb만 잘 끌어오면 기존 데이터는 접근 가능합니다.
(ps) 2021.11.19: 특정 테이블만 가져오기
# python manage.py inspectdb --database=디비명 테이블명1 테이블명2 > 폴더이름/models.py
python manage.py inspectdb --database=default TEMP TEMP2 > ./models/models.py
'Programming > Python_Web' 카테고리의 다른 글
Flask - apache 연동(mod_wsgi) (0) | 2020.08.21 |
---|---|
Django - Database 입력/조회 폼 (폼 클래스 아님) (0) | 2020.06.14 |
Django - IIS에서 static file 설정하기 (0) | 2020.05.14 |
Django - CSS적용하기 (0) | 2020.05.13 |
Django - IIS 연동 (Windows Server2012) (11) | 2020.05.08 |