【问题标题】:Django on SQL Server database filtersSQL Server 数据库过滤器上的 Django
【发布时间】:2013-08-14 08:46:07
【问题描述】:

我需要从不属于我的 SQL Server 2000 Enterprise Edition 数据库中过滤数据,因此我无法更改它。

我的问题是这样的:

mymodel.objects.get(id=1) 

工作正常

mymodel.objects.filter(id=1)

返回一个空的 QuerySet '[]' 和

mymodel.objects.all()

做同样的事情。

这是我的项目/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc' ,
        'NAME': 'QuaniVB',             
        'USER': 'sa',                  
        'PASSWORD': '****',         
        'PORT': '1433' ,            
        'OPTIONS': {
                    'driver': 'FreeTDS',
                    'dsn' : 'MSSQL-QUANI',
        }
    },
  'emanager2': {
        'ENGINE': 'sql_server.pyodbc' , 
        'NAME': 'emanager',             
        'USER': 'sa',                   
        'PASSWORD': '******',               
        'HOST' : 'emanager2' ,
        'PORT': '1433' ,   
        'OPTIONS': {
                    'dsn' : 'MSSQL-EMANAGER2', ## as in /etc/odbc.ini
        }
    },
}

这就是模型

class Medico(models.Model):
    tipo_medico = models.TextField(db_column='TIPO_MEDICO', blank=True) 
    id_medico = models.AutoField(primary_key=True, db_column='ID_MEDICO')
    cod_regionale_medico = models.TextField(db_column='COD_REGIONALE_MEDICO', blank=True)
    cognome = models.TextField(db_column='COGNOME', blank=True)
    nome = models.TextField(db_column='NOME', blank=True) 
    codfisc_medico = models.TextField(db_column='CODFISC_MEDICO', blank=True) 
    reg_ulss_appartenenza = models.TextField(db_column='REG_ULSS_APPARTENENZA', blank=True) 
    cod_individuale = models.TextField(db_column='COD_INDIVIDUALE', blank=True) 
    id_comune_ambulatorio = models.DecimalField(decimal_places=0, null=True, max_digits=18, db_column='ID_COMUNE_AMBULATORIO', blank=True) 
    cod_unita_med = models.TextField(db_column='COD_UNITA_MED', blank=True) 
    class Meta:
        db_table = 'MEDICO'

这是我的“python manage.py shell”测试

>>> from myapp.models import Medico
>>> med = Medico.objects.using('emanager2')
>>> med.get(id_medico= 11746).cognome
>>> med.filter(id_medico= 11746)
[]
>>> med.all()
[]
>>>

有什么建议

【问题讨论】:

    标签: sql-server django filter pyodbc


    【解决方案1】:

    尝试查看 Django 生成的原始 SQL

    >>> from django.db import connection
    >>> from myapp.models import Medico
    >>> Medico.objects.using('emanager2').get(id=1) # you said this one works
    <Medico object>
    >>> connection['emanager2'].queries
    [{u'sql': u'YOUR SQL WILL BE HERE', u'time': u'0.117'}]
    >>> Medico.objects.using('emanager2').all() # you said this one didn't work
    []
    >>> connection['emanager2'].queries
    ... more SQL printed here
    

    【讨论】:

    • 我的连接查询看起来像这样... >>> 打印 connection.queries [] 一个空列表
    • @francesco 我已经更新了答案。此外,您需要确保为此启用了 DEBUG。
    • 但是,如果我在另一个客户端执行 >>> Medico.objects.using('emanager2').query 的结果,它会提取所有正确的记录
    • 前面是在debugshell中执行的,在myproject/settings.py中DEBUG为True
    • “在另一个客户中”是什么意思?这是另一个壳吗?有什么不同?
    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 2017-04-30
    • 2018-05-24
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多