2016-12-16 3 views
0

웹 사이트의 수명 기간 동안 명령을 실행하고 싶습니다. 나는 그것을 한 번 이상 돌리고 싶지 않다.DB 연결이 설정된 후 어떻게 SQL 쿼리를 실행합니까?

의 내가 쿼리를 실행하려는 가정 해 봅시다 :이 넣어해야

SomeRandomObject.objects.raw('set names utf8mb4;') 

:

set names utf8mb4; 

그럼 난 그냥 뭔가를 실행하는 것입니까? 내가 쿼리를 실행하는 개체가 중요합니까? 더 나은 물체가 있습니까?

+0

에 다음과 같은 : http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only –

답변

1

나는 보통 connection 개체 자체에서이 작업을 수행합니다.

from django.db import connections 
cursor = connections['DATABASE_NAME'].cursor() 
# replace DATABASE_NAME with the name of your 
# DATABASE connection, i.e., the appropriate key in the 
# settings.DATABASES dictionary 
cursor.execute("set names utf8mb4;") 

이렇게하면 임의의 모델을 사용하여 원시 쿼리를 실행하지 않아도됩니다.


n.b. 당신은 단지 즉, 하나 개의 데이터베이스 연결이있는 경우, default 당신이 사용할 수 있습니다

from django.db import connection 
cursor = connection.cursor() 
cursor.execute("set names utf8mb4;") 

시작할 때 한번를 실행하려면 추가 할 수 있습니다이 유용 할 수 있습니다 귀하의 DATABASES

DATABASES = { 
    'default': { 
     ... 
     'OPTIONS': { 
      "init_command": "set names utf8mb4;" 
     } 
    } 
} 
+0

난 단 하나의 데이터베이스 구성을 settings.py에 지정되어 있으므로 하나의 연결일까요? 또한이 파일에 어떤 파일을 넣었습니까? – User

+1

네, 그건 단지 하나의 데이터베이스입니다. 원하는 위치에이 스 니펫을 배치 할 수 있습니다. 어떻게 부르는 지 당신에게 달려 있습니다. Paul Collingwood가 제안한 것처럼 시작시 실행되도록하려면보기 외부의보기 파일에 배치하십시오. – 2ps