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",
},
}
}
그래서 그 결과로 성공…. 오늘도 역시 삽질의 연속이다.