django 사용 중 3단 콤보로 맞아서 글로 남김
1. raw query + group by 에러
1
2
3
|
raw_query = "select date, sum('price') from test_table group by date"
Model.objects.raw(raw_query)
|
cs |
실행시 만일 에러가 아래와 같다면
Raw query must include the primary key
django에서는 Model.objects.raw() 실행은 ORM 요청이기 때문에 raw 쿼리 요청 시에도 primay key를 요구하는데,
문제는 group by 문구가 들어가면
select 1 id, sum('price') from test_table group by date
"1 id" 같은 꼼수도 동작하지 않는다.
django.db를 통해 직접 커넥션을 맺어서 해결해야 한다.
1
2
3
4
5
6
7
|
from django.db import connection
raw_query = "select date, sum('price') from test_table group by date"
with connection.cursor() as cursor:
cursor.execute(raw_query)
row = cursor.fetchone()
|
cs |
2. default 디비가 아닌 다른 디비로의 raw 쿼리
저의 경우 하나의 django에 4개의 디비를 바라보고 있다
from django.db import connection
connection 는 settings.py의 default를 바라보도록 설정되어 있다.
제가 원하는 디비에 커넥션을 맺기 위해서는
아래와 같이 셋팅해 주면 됩니다.
1
2
3
4
5
6
7
|
from django.db import connection, connections
from django.db.utils import OperationalError
db_conn = connections['settings.py의 원하는 디비']
with db_conn.cursor() as cursor:
cursor.execute(raw_query)
qs = cursor.fetchall()
|
cs |
결론 : 문서를 꼼꼼히 읽자
참고 사항
'web > Django' 카테고리의 다른 글
Django migrate model 칼럼 추가시 null=True는 가급적 쓰지 말자 (0) | 2022.05.03 |
---|---|
pytest 시 여러개의 디비 사용하기 (0) | 2021.10.08 |
Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'. - django 3.2 version up (2) | 2021.05.10 |
How Django process a request (0) | 2021.05.10 |
django RemoteUserAuthentication 는 별거 없습니다. (0) | 2020.06.24 |