Teshi's Think Log

Django & mssql "collation" 에러

posted by teshi at 2021-05-04 08:34
categories : Python

 

Django와 mssql를 같이 사용해야 할 일이 생겼다. 

DATABASES = {
   'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
   }
   'mssql': {
        'ENGINE' : 'sql_server.pyodbc',
        'NAME' : '',
        'USER' : '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '1433',
        'OPTIONS': {
            'driver': "ODBC Driver 17 for SQL Server",
        },
   }
}

위와 같이 setting.py를 설정하고 해당 데이터베이스 스키마를 읽어오기 위해서

~ python3 manage.py inspectdb --database mssql

실행 결과....

# Unable to inspect table '[TABLE_NAME]'
# The error was: __new__() missing 1 required positional argument: 'collation'

.... 이 문제를 해결하기 위해 구글을 뒤지고 뒤지다가 놓치고 못 본 것이 있었으니...

Django 3.2에서 나타나는 문제로 Django 3.0 으로 낮추면 해결된다.

였다.

Django 3.2에서 Django 3.0으로 낮추려면 아래와 같이 명령을 내려주면 된다.

~ pip3 uninstall django
~ pip3 install django==3.0.0

그리고 실행하면! 또 다른 에러가 뜬다.

django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:

ERRORS:
?: (translation.E004) You have provided a value for the LANGUAGE_CODE setting that is not in the LANGUAGES setting.

그러면... setting.py에서 LANGUAGE_CODE를 변경하여 준다. 나의 경우,

LANGUAGE_CODE = 'ko-kr'

에서

LANGUAGE_CODE = 'ko'

로 변경하였다. 그리고 실행하면!

 

안됨....

 

TypeError: argument 1 must be str, not PosixPath

원인은 setting.py의 DATABASE 선언 부분이었다.

DATABASES = {
   'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
   }
   'mssql': {
        'ENGINE' : 'sql_server.pyodbc',
        'NAME' : '',
        'USER' : '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '1433',
        'OPTIONS': {
            'driver': "ODBC Driver 17 for SQL Server",
        },
   }
}

위에서 default의 NAME 부분 패스를 문자열로 변경하면 해결된다. 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': str(BASE_DIR) + '/db.sqlite3',
    },
    'mssql': {
        'ENGINE' : 'sql_server.pyodbc',
        'NAME' : '',
        'USER' : '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '1433',
        'OPTIONS': {
            'driver': "ODBC Driver 17 for SQL Server",
            },
    }
}

그래서 그 결과로 성공.... 오늘도 역시 삽질의 연속이다.