Python Django数据库连接库问题
我面对这种行为,不确定这是一个错误。当我使用从Python Django数据库连接库问题,python,django,python-3.x,oracle,pandas,Python,Django,Python 3.x,Oracle,Pandas,我面对这种行为,不确定这是一个错误。当我使用从cx\U Oracle创建的连接时,它会按照假设工作。 但当我使用Django DB连接时,它给出了结果,但并不像预期的那样 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.conn
cx\U Oracle
创建的连接时,它会按照假设工作。
但当我使用Django DB连接时,它给出了结果,但并不像预期的那样
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)
问题:
'ENGINE': 'django.db.backends.oracle' # As mentioned in django document in DB connections
您确定,
DB2
指向的位置与cx\u Oracle\u conn
指向的位置相同吗?@trinchet是的,我为两个连接提供了相同的凭据。DB2是settings.py
文件中提供的数据库名称。通常,我使用django连接。在面对这个有线问题后,我尝试了正常的连接过程。其他查询是针对django连接返回意外结果,还是仅返回原始帖子中的结果?要三次检查两个连接是否指向同一个位置,可以将查询更改为:selectuser | |'||SYS|u CONTEXT('USERENV','DB|u NAME')|||来自dual的系统上下文('USERENV','SERVER\u HOST')代码>此外,这篇文章建议使用read\u sql\u查询和QuerySet而不是read\u sql填充数据帧的另一种方法。你试过了吗?@cdub没有,Django连接在其他查询中运行良好。仅对于原始帖子,它返回了意外的结果。我还通过将相同的参数传递到两个连接来检查空闲状态。我得到了同样意想不到的结果。在链接中,django有模型。但就我而言,我没有创建任何模型。所以,我已经有了一个查询字符串。我也尝试过使用read\u sql\u query
(没有用)。这将有助于查看Oracle正在解析的sql在这两个连接之间是否不同。您通常可以使用v$session和v$sql视图来查找已解析的查询,或者与DBA一起跟踪会话。如果两者之间的SQL相同,那么我就没有想法了。