[[Django]]의 [[Oracle]] 지원 <> == History == 1. 최초 [[Django]]는 [[PostgreSQL]], [[MySQL]], [[Sqlite]] 만을 지원했다. 1. [[http://code.djangoproject.com/ticket/87|#87]]을 시작으로 [[Oracle]] 지원 구현 시작 1. 2006-11-4 [[http://code.djangoproject.com/wiki/OracleBranch|Oracle branch]] starts 1. 2007-06-23 [[http://code.djangoproject.com/changeset/5519|#5519]]로 trunk 에 통합됨 == 사용방법 == [[Oracle]] 세팅 1. [[http://www.oracle.com/technology/software/products/database/xe/index.html|Oracle Database 10g Express Edition]] 설치 1. CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE 권한들을 가진 사용자를 생성한다. (test suites를 쓰기 위해서는 CREATE|DROP DATABASE and CREATE|DROP TABLESPACE 도 필요하다. ) 1. [[cx_Oracle]] 설치 [Django] settings.py {{{ DATABASE_ENGINE = 'oracle' DATABASE_NAME = 'xe' DATABASE_USER = 'a_user' DATABASE_PASSWORD = 'a_password' DATABASE_HOST = 'dbprod01ned.mycompany.com' DATABASE_PORT = '1540' }}} == 주의사항 == === Tablespace === db_tablespace 옵션을 통해 WikiPedia:Tablespace 설정을 추가할 수 있다. {{{#!python class TablespaceExample(models.Model): name = models.CharField(maxlength=30, db_index=True, db_tablespace="indexes") data = models.CharField(maxlength=255, db_index=True) edges = models.ManyToManyField(to="self", db_tablespace="indexes") class Meta: db_tablespace = "tables" }}} 위 예제에서 생성된 테이블들은 tables 라는 tablespace에 저장된다. name 필드의 인덱스와 many-to-many table의 인덱스들은 indexes 라는 tablespace에 저장된다. data 필드는 인덱스를 생성하지만, 따로 db_tablespace 옵션이 설정되어 있지 않기 때문에, 디폴트로 tables tablespace 에 저장된다. === 테이블이름 제한 === [[Oracle]]은 테이블명을 30자이내로 제한한다. [[Django]]는 자동으로 테이블명이름을 잘라내며, 겹침을 막기위해 마지막 4글자를 [[MD5]] 해싱한다. === 빈 문자열 === [[Django]]는 NULL 대신에 빈문자열("")을 선호한다. 대신 [[Oracle]]은 빈문자를 NULL로 취급한다.