아니 뭐 db는 하나만 써봤죠?
아니 왜 안 가르쳐 줬어여,,,,,?
inspectdb
이미 갖춰진 table을 불러와서 migration, migrate 없이 사용 할 수도,
또, db를 여러 개 사용할 수도 있다는 건 아주 당연한건데
db를 덤프 떠서 다시 넣어 사용을 해봤으면 아주 자연스럽게 궁금할 수도 있지 않았을까?
python manage.py inspectdb --database service strategy > models.py
python manage.py inspectdb > 'app/models.py' --database service strategy
이렇게 이미 사용되고 있는 db의 table을 불러오면 models.py
가 자동으로 생긴다.
그럼 migration을 해도 migration file이 생기지 않고 그대로 쓰면 된다.
그리고 migrate를 해도 아래와 같이,
class Meta:
managed = False
managed = False
option 때문에,
django는 해당하는 model을 수정하거나, 지우거나, 새로 만들거나 하지 않는다.
당연히 수정이 필요하다면 managed = True
로 설정해주면 된다.
공식문서링크
하지만!
이렇게 있지도 않은 id를 계속 찾고,,,,,
아니 field가 없는데, migration 파일도 없는데??? db에는 당연히 없는데?
구글링과 삽질을 하루 종일 하다가 결국 migration을 해보는데,,,
아니 원래 migration을 하면 파일이 안 생겨야 되는데
아주 자연스럽게 migration과 migrate가 되면서,,,,,
id field가 생겼고, models.py
에는 id가 없고, db에도 당연히 없고 흫
당연히 managed=False
이니 model과 db는 그대로
stackoverflow 형님들께서는
id column(primary_key=True)을 넣어주라고 하셨고,
아니 이게 내 db면 진작 드뢉디비 하고, migration 싹 날렸지 흫
models.py
작성할 때, id field를 만들지 않아도 db에 생성 되어 있는 것처럼!)primary_key=True
를 꼭 가지고 있는! table을 넣어줘야 하는 것인데,
새로운 table을 inspectdb 하면서 내 20시간의 고민은 해결이 되었다
내 주말.... 흫
Multiple databases
django.db.utils.programmingerror (1146 table doesn't exist)
db setting이 여러 개이다 보니,
default, 기타 등등이 있는데,
default로 가서 또 table을 찾아 해매지
내 잘못이지. 응 이건 좀 이해가 되. 어느 db를 가라고 내가 말 안해줬지
multiple databases라는 keyword를 쉽게(?)찾고, 공식문서많이봤지
방법은 두 가지
일단 그래야 할 것 처럼, dbrouter.py
을 작성하면 된다
작성을 하다가 공식문서를 한 번 쭉 내리면
왠지 끌리는 수동으로 설정하는 방법이 나온다. 직접 콕 찍어주는 방법
strategy = Strategy.objects.using('db name').all()
dbrouter.py
를 쓰는 것보다 우선하고(공식문서에 의하면?),
아~주 직관적이지만, 관리적인 측면에서, 그리고 또 더러운 코드가 되므로
쓰다만 router를 마저 쓰도록 하지
settings에 꼭 세팅하고(common.py에 setting 함)
DATABASE_ROUTERS = (
'rim_project.apps.dbrouter.MultiDBRouter',
)
설정을 전부 다 마치고 나면,
에러가 또 나지!
아, OhTha,,,,,였지,,,,,흫