Django 와 MySQL 연결하기(2) -> Django에 연결

JungSungHo·2023년 5월 13일
0

Django

목록 보기
2/2
post-thumbnail

1. 커넥터 설치

pip install mysqlclient

  • 앞 (1)에서 설치하신 분들은 설치하지 않으셔도 됩니다.

[MySQL Workbench]

-> 이렇게 사용자 생성과 DB 생성까지 마친다. DB도 터미널에서 가능하지만 편의상 workbench에서 만들었다.
아래 랭크에 해당 방법 나와있습니다!
Django 와 MySQL 연결하기(1) -> MySQL DB 생성하기

2. Settings.py 수정해주기

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': '',#db명
        'USER': '', #db user 이름
        'PASSWORD': '', #db password
        'HOST': 'localhost', #나중에 aws로 연결
        'PORT': '3306', #mysql 포트번호
    }
}

이 공란들을 채워줄 것인데 만약 협업을 하고 있거나 settings.py를 공유해야한다면, DB에는 계정 비밀번호 등 개인정보가 들어있기 때문에, .gitignore에 등록하고 따로 파일을 만들어서 가지고 있는 것이 좋다.

따로 파일을 만들어서 정보를 가지고 있는 방법을 알아보자.
원리는 이렇다 my_settings.py를 만들고 settings.py 에서 my_settings.py를 import 해서 정보를 받아오는 형식으로 할 것이다.

<프로젝트 폴더에 새로운 my_settings.py를 만든 모습>

생성한 DB 이름, 권한을 부여한 account , 설정한 host, 포트번호를 넣고, 저장해주면 된다.

이제 DATABASE 부분을 아래처럼 수정해주면 된다.

또는 만약 기존에 기본 sqllite3로 이미 연결돼있었다면,

# mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

위부분을 아래처럼 바꿔주면 된다.

# mysite/my_settings.py

from . import my_settings

DATABASES = my_settings.DATABASES

3. DB에 테이블 생성하기

이제 migrate를 진행하여 DB에 models.py에 있는 모델정보를 담으려고 한다.

migrate 전에는 아무런 테이블이 만들어져있지 않음을 볼 수 있다.

$ (venv) python manage.py makemigrations
$ (venv) python manage.py migrate

코드를 통해 모델정보를 담아준다.

저같은 경우에는

django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1142, "CREATE command denied to user 'dropbox_django_id'@'localhost' for table 'django_migrations'"))

같은 테이블을 생성할 수 없다는 에러가 났는데, 권한 설정에서 문제가 있었던 것 같습니다.
workbench에 가서 DDL 권한을 모두 부여하고 다시 실행해봤는데요

(myvenv) C:\Users\kjeng\Desktop\Study\CloudComputing\dropbox_django>python manage.py makemigrations 
No changes detected

(myvenv) C:\Users\kjeng\Desktop\Study\CloudComputing\dropbox_django>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app, auth, contenttypes, sessions
Running migrations:
Traceback (most recent call last):
  File "C:\Users\kjeng\Desktop\Study\CloudComputing2\Dropbox_Django\myvenv\Lib\site-packages\django\db\backends\utils.py", line 87, in _execute
    return self.cursor.execute(sql)
           ^^^^^^^^^^^^^^^^^^^^^^^^
    _mysql.connection.query(self, query)
django.db.utils.OperationalError: (1142, "CREATE command denied to user 'dropbox_django_id'@'localhost' for table 'django_migrations'")

During handling of the above exception, another exception occurred:
.
.
.
 self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\kjeng\Desktop\Study\CloudComputing2\Dropbox_Django\myvenv\Lib\site-packages\django\core\management\base.py", line 412, in run_from_argv        
    self.execute(*args, **cmd_options)
(myvenv) C:\Users\kjeng\Desktop\Study\CloudComputing\dropbox_django>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app, auth, contenttypes, sessions
Running migrations:
  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 auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

다시 잘 실행됨을 볼 수 있습니다.
이후 workbench를 보게되면 테이블들이 잘 만들어진 것을 확인할 수 있습니다.

0개의 댓글