问题
It seems to me that Django currenty only provides 4 backend database engine which are:
- 'django.db.backends.postgresql'
- 'django.db.backends.mysql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
If I use MySQL, all I have to do is just fill the Engine with 'django.db.backends.mysql'. But now, because my main Database is DB2, I'm having some issues to connect it with pyodbc. What is needed?
import os
SECRET_KEY = 'o0zdmzzdw44tkd5a7o*h-@*bo)r@f#)!)$)8f-y%=sn*kr)@t%'
DEBUG = True
ALLOWED_HOSTS = [127.0.0.1]
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'arapi.apps.ArapiConfig', #my projeck
'rest-framework',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
ROOT_URLCONF = 'arDRFAPIWEB.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'arDRFAPIWEB.wsgi.application'
DATABASES = {
'default': {
'ENGINE': 'ibm_db_django',
'NAME': as400,
'USER' : root,
'PASSWORD' : root,
'HOST' : as400.****.co.id,
'PORT' : 3306,
'PCONNECT' : True, #Optional property, default is false
}
}
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'
When I run python manage.py test I got this error
Try using 'django.db.backends.XXX', where XXX is one of: 'mysql', 'oracle', 'postgresql', 'sqlite3'
Although I've downgrade the python into 3.6.5 version and my django is 2.1.1 version which I thought this might solve the problem.
回答1:
There is a Django driver available for IBM Db2. It is even referenced in the Db2 documentation and there is a document which describes the setup procedure for Db2 and Django. There, they suggest a configuration like this:
DATABASES = {
'default': {
'ENGINE' : 'ibm_db_django',
'NAME' : 'database',
'USER' : 'user',
'PASSWORD' : 'password',
'HOST' : 'localhost',
'PORT' : '50000',
'PCONNECT' : True, #Optional property. It is true by default
}
}
You can find the driver package ibm_db_django in the related GitHub repo.
You need to specify ibm_db_django instead of, e.g., django.db.backends.mysql. django.db.backends.db2 will give an error.
来源:https://stackoverflow.com/questions/61672647/db2-driver-for-django