FAQ: 데이터베이스와 모델 ========================= .. _faq-see-raw-sql-queries: Django 실행 중 저수준의 SQL 질의는 어떻게 확인하나요? ---------------------------------------------------- 먼저 Django의 :setting:`DEBUG` 설정을 ``True``\ 로 변경하세요. 그리고 아래와 같이 따라하세요. :: >>> from django.db import connection >>> connection.queries [{'sql': 'SELECT polls_polls.id,polls_polls.question,polls_polls.pub_date FROM polls_polls', 'time': '0.002'}] ``connection.queries``\ 는 :setting:`DEBUG` 설정이 ``True``\ 일 때만 사용할 수 있습니다. 실행 결과는 질의 실행 순서로 구성된 사전의 리스트로 이루어져 있으며 각각의 사전은 아래의 항목을 포함하고 있습니다. :: ``sql`` -- 저수준 SQL 문 ``time`` -- SQL 문의 실행 시간(초 단위). ``connection.queries``\ 는 INSERT, UPDATE, SELECT 등 수행하는 모든 SQL 문을 포함하고 있습니다. 여러분의 앱이 데이터베이스를 사용할 때마다 모든 쿼리가 기록됩니다. 참고로 이곳에 기록되는 SQL은 :ref:`SQLite에서 인용부호의 불일치 `\ 가 발생할 수 있습니다. .. versionadded:: 1.2 만약 여러분이 :doc:`다중 데이터페이스`\ 를 사용하고 있다면, 각각의 ``connections`` 사전에 대해 동일한 인터페이스를 사용할 수 있습니다. :: >>> from django.db import connections >>> connections['my_db_alias'].queries 기존에 사용하던 데이터베이스를 Django와 함께 사용할 수 있나요? ---------------------------------------------- 물론입니다. :doc:`레거시(legacy) 데이터베이스와 통합하기 `\ 를 참조하세요. 모델을 수정하게 될 경우 어떻게 데이터베이스에 적용하나요? ----------------------------------------------------------- 만약 데이터가 초기화되어도 괜찮다면, 여러분의 프로젝트에 있는 ``manage.py`` 유틸리티의 옵션을 사용하여 특정 애플리케이션의 SQL을 초기화 시킬 수 있습니다. :: manage.py reset appname 위의 명령은 특정 ``appname``\ 과 관련된 모든 테이블을 삭제하고 다시 생성합니다. 만약 데이터가 삭제되지 않길 원할 경우, 데이터베이스에 ``ALTER TABLE`` 문을 실행하여 수동으로 적용할 수 있습니다. 몇 가지 `스키마 업데이트를 다루는 외부 프로젝트 `_\ 가 진행중이며, `south `_\ 가 사실상 표준으로 널리 사용되고 있습니다. Django 모델은 다중 컬럼 기본 키를 제공하나요? ------------------------------------------------------ 아니요. 단일 컬럼 기본 키만 제공합니다. 이것은 실제로 큰 문제가 되지 않습니다. 여러분은 ``unique_together`` 모델 옵션을 사용하거나 데이터베이스에 직접 제약조건을 생성함으로써 유일성을 보장할 수 있습니다. 단일 컬럼 기본 키는 보다 쉽게 특정 개체를 수정, 삭제하기 위한 관리자 인터페이스 등을 위해 필요합니다. CREATE TABLE 문에 테이블 타입으로 MyISAM을 설정하는 등의 데이터베이스 옵션을 추가할 수 있나요? ------------------------------------------------------------------------------------------------------------------ 우리는 Django 코드에 테이블 타입 등의 특정 데이터베이스에 종속되는 옵션들이 포함되는 등의 특별한 상황을 최대한 피하고자 합니다. 만약 여러분이 이런 옵션을 사용하고자 한다면, 여러분이 원하는 ``ALTER TABLE`` 문을 포함하는 :ref:`SQL 초기 데이터 파일 `\ 을 생성하세요. 초기 데이터 파일은 ``CREATE TABLE`` 문 다음으로 실행됩니다. 예를 들어, 여러분이 MySQL을 사용하고 MyISAM 테이블 타입의 테이블을 사용하고자 한다면, 초기 데이터 파일을 생성한 후 다음과 같이 입력해 주세요. :: ALTER TABLE myapp_mytable ENGINE=MyISAM; :ref:`SQL 초기 데이터 파일 ` 문서에서 설명한 바와 같이, 이 SQL 파일은 임의의 SQL을 포함하며, 여러분은 여러분이 원하는 어떠한 수정사항들도 만들 수 있습니다. Django는 왜 메모리 누수를 일으키나요? ----------------------------- Django에서 메모리 누수를 일으키는 문제는 알려져있지 않습니다. 만약 여러분의 Django 프로세스가 메모리를 점점 더 많이 사용하면서 반납하지 않고 있다면 :setting:`DEBUG` 설정이 ``False`` 로 설정되어 있는지 확인하세요. 만약 :setting:`DEBUG`\ 가 ``True``\ 라면, Django는 실행되는 모든 SQL 문의 복사본을 저장합니다. (모든 질의는 ``django.db.connection.queries``\ 에 저장됩니다. `Django 실행 중 날(raw) SQL 질의는 어떻게 확인하나요?`_\ 를 참고하세요.) 이 문제를 해결하기 위해, :setting:`DEBUG`\ 를 ``False``\ 로 설정하세요. 만약 여러분의 함수 어느곳에서든 질의 목록을 수동으로 삭제하고자 한다면, 아래와 같이 ``reset_queries()``\ 를 호출하세요. :: from django import db db.reset_queries()