Differences between revisions 3 and 6 (spanning 3 versions)
Revision 3 as of 2007-09-17 13:58:57
Size: 999
Editor: 203
Comment:
Revision 6 as of 2011-09-25 17:03:37
Size: 2236
Editor: 211
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[Django]의 [Oracle] 지원 [[Django]][[Oracle]] 지원
Line 3: Line 3:
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 에 통합됨
<<TableOfContents>>

==
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 에 통합됨
Line 11: Line 13:
[Oracle] 세팅
 1. [http://www.oracle.com/technology/software/products/database/xe/index.html Oracle Database 10g Express Edition] 설치
[[Oracle]] 세팅
 1. [[http://www.oracle.com/technology/software/products/database/xe/index.html|Oracle Database 10g Express Edition]] 설치
Line 14: Line 16:
 1. [cx_Oracle] 설치  1. [[cx_Oracle]] 설치
Line 25: Line 27:

== 주의사항 ==
=== 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로 취급한다.

DjangoOracle 지원

History

  1. 최초 DjangoPostgreSQL, MySQL, Sqlite 만을 지원했다.

  2. #87을 시작으로 Oracle 지원 구현 시작

  3. 2006-11-4 Oracle branch starts

  4. 2007-06-23 #5519로 trunk 에 통합됨

사용방법

Oracle 세팅

  1. Oracle Database 10g Express Edition 설치

  2. CREATE TABLE, CREATE SEQUENCE, CREATE PROCEDURE 권한들을 가진 사용자를 생성한다. (test suites를 쓰기 위해서는 CREATE|DROP DATABASE and CREATE|DROP TABLESPACE 도 필요하다. )
  3. 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 옵션을 통해 Tablespace 설정을 추가할 수 있다.

   1 class TablespaceExample(models.Model):
   2     name = models.CharField(maxlength=30, db_index=True, db_tablespace="indexes")
   3     data = models.CharField(maxlength=255, db_index=True)
   4     edges = models.ManyToManyField(to="self", db_tablespace="indexes")
   5 
   6     class Meta:
   7         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로 취급한다.

DjangoAndOracle (last edited 2011-09-25 17:03:37 by 211)

web biohackers.net