Проблема с библиотекой соединений с базой данных Django - PullRequest
5 голосов
/ 23 мая 2019

Я сталкивался с таким поведением, не уверен, что это ошибка. Когда я использую соединение, созданное из cx_Oracle, оно работает как предполагалось. Но когда я использую Django DB connections, это дает результат, но не так, как ожидалось.

import cx_Oracle
from django.db import connections
import pandas as pd

dsn_tns = cx_Oracle.makedsn('xx.x.xx.xxx', 'port', 'dbname')
cx_Oracle_conn = cx_Oracle.connect('user', 'pass', dsn_tns)

django_conn = connections["DB2"] # In django settings, I have a created "DB2" and passed the same parameters.

query = ''' 
SELECT (T1.ACCEPTED- T2.CANCELLED) AS "NET" FROM
(
SELECT ID, COUNT(1) AS ACCEPTED FROM ACCEPTED_TABLE
GROUP BY ID
) T1
LEFT JOIN
(SELECT ID, COUNT(1) AS CANCELLED FROM CANCELLED_TABLE
GROUP BY ID) T2
ON T1.ID=T2.ID
'''

df1 = pd.read_sql(query, cx_Oracle_conn) # Gives right result
df2 = pd.read_sql(query, django_conn) # Gives only count of T1.ACCEPTED(T2.CANCELLED having 0 count)

Вопросы:

  1. В чем причина этого? Как соединение может повлиять на выполнение запроса?
  2. Это ошибка Джанго? Или мне нужно использовать соединения django другим способом?
  3. Как django.db.backends.oracle это работает? Можете подробно объяснить?

Версии:

Джанго == 2.1.2

Python == 3.6.7

'ENGINE': 'django.db.backends.oracle' # As mentioned in django document in DB connections
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...