django 쿼리를 작성할 때 id / pk를 쿼리 매개 변수로 사용할 수 있습니다.
Object.objects.get(id=1)
Object.objects.get(pk=1)
django의 문서에 따르면 pk는 기본 키를 나타내며 지름길이라는 것을 알고 있습니다. 그러나 언제 id 또는 pk를 사용해야하는지 명확하지 않습니다.
django 쿼리를 작성할 때 id / pk를 쿼리 매개 변수로 사용할 수 있습니다.
Object.objects.get(id=1)
Object.objects.get(pk=1)
django의 문서에 따르면 pk는 기본 키를 나타내며 지름길이라는 것을 알고 있습니다. 그러나 언제 id 또는 pk를 사용해야하는지 명확하지 않습니다.
답변:
중요하지 않습니다. pk
당신이 기본 키 필드가 호출되는지 여부를 신경 쓸 필요가없는, 즉 실제 기본 키 필드에서 더 많은 독립적 인 id
또는 object_id
또는 무엇 이건.
또한 기본 키 필드가 다른 모델이있는 경우 일관성이 향상됩니다.
id
또한 파이썬에서 내장 함수이며, 그 때문에 pk를 사용하는 것을 선호합니다.
내가 pk
항상 반환 한다는 것을 알고있는 Django 프로젝트에서는 함수 (변수 이름을 제외한 모든 곳) 와 충돌하지 않을 때 id
사용하는 것을 선호합니다 . 그 이유 는에서 속성 이름을 찾는 데 시간이 걸리기 때문에 7 배 더 느린 속성 이기 때문 입니다 .id
id()
pk
id
pk
meta
%timeit obj.id
46 ns ± 0.187 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit obj.pk
347 ns ± 11.3 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
관련 장고 코드는 다음과 같습니다.
def _get_pk_val(self, meta=None):
meta = meta or self._meta
return getattr(self, meta.pk.attname)
def _set_pk_val(self, value):
return setattr(self, self._meta.pk.attname, value)
pk = property(_get_pk_val, _set_pk_val)
라는 변수를 사용해야하는 경우는 거의 없습니다 pk
. 나는 user_id
대신에 더 자세한 것을 사용하는 것을 선호합니다 pk
.
전체 프로젝트에서 동일한 규칙을 따르는 것이 좋습니다. 귀하의 경우 id
속성이 아닌 매개 변수 이름이므로 타이밍 차이가 거의 없습니다. 매개 변수 이름은 내장 id()
함수 의 이름과 충돌하지 않으므로 id
여기서 사용하는 것이 안전합니다 .
요약하면 필드 이름을 사용할지 id
또는 pk
바로 가기 를 사용할지를 선택하는 것은 사용자의 몫 입니다. Django 용 라이브러리를 개발하지 않고 모든 모델에 자동 기본 키 필드 를 사용 id
하는 경우, 어느 곳에서나 사용하는 것이 안전하며 때로는 더 빠릅니다. 반면, 기본 키 필드 (아마도 사용자 정의)에 대한 범용 액세스를 원한다면 pk
어디에서나 사용하십시오 . 마이크로 초의 3 분의 1은 웹을위한 것이 아닙니다.
id
and forpk