반응형
Django: 원시 SQL 쿼리에서 명명된 매개 변수 사용
동적으로 빌드되는 원시 쿼리를 실행하려고 합니다.파라미터가 유효한 위치에 삽입되도록 하기 위해 명명된 파라미터를 사용합니다.
Sqlite에서는 문제없이 동작할 수 있을 것 같습니다.(모든 테스트 성공) 하지만 MariaDb에 대해 동일한 코드를 실행하면 실패합니다.
간단한 쿼리 예를 다음에 나타냅니다.
SELECT u.*
FROM users_gigyauser AS u
WHERE u.email like :u_email
GROUP BY u.id
ORDER BY u.last_login DESC
LIMIT 60 OFFSET 0
파라미터는 다음과 같습니다.
{'u_email': '%test%'}
파라미터가 대체되지 않았기 때문에 발생하는 오류는 기본 구문 오류입니다.'%'을(를) 표시기로 사용하려고 했지만, 이로 인해 sql이 구문 분석을 시도했습니다.
%u[_email]
타입 오류가 반환되었습니다.
다음과 같이 쿼리를 실행합니다.
raw_queryset = GigyaUser.objects.raw(self.sql_fetch, self._query_object['params'])
또는 셀 때:
cursor.execute(self.sql_count, self._query_object['params'])
둘 다 MariaDB에서 동일한 오류가 발생하지만 SQLite에서 작동합니다(':' 표시기 사용).
내가 뭘 놓쳤지?
편집:
이 포맷은, 다음의 것을 필요로 합니다.s
접미사는 다음과 같습니다.
%(u_email)s
SQLite3를 사용하는 경우 어떤 이유로 구문 지정%(name)s
동작하지 않습니다.사용하셔야 합니다.:name
매개 변수를 전달하려면 구문 대신{"name":"value"}
사전.
첫 번째 구문은 모든 DB 엔진에서 작동해야 한다는 설명서와 반대됩니다.
문제의 출처는 다음과 같습니다.https://code.djangoproject.com/ticket/10070#comment:18
언급URL : https://stackoverflow.com/questions/36311528/django-using-named-parameters-on-a-raw-sql-query
반응형
'programing' 카테고리의 다른 글
실행 중인 Composer 반환: "입력 파일을 열 수 없습니다: composer.phar" (0) | 2023.01.30 |
---|---|
"PIX 경로 구축에 실패했습니다" 및 "요청된 대상에 대한 유효한 인증 경로를 찾을 수 없습니다" (0) | 2023.01.30 |
Python Panda - 두 데이터 프레임 간의 차이점 찾기 (0) | 2023.01.30 |
Django 템플릿 변수가 있는 사전 값 검색 방법 (0) | 2023.01.30 |
Vuex 상태 어레이가 변환될 때 프록시 개체 전환 (0) | 2023.01.30 |