2016-07-04 16 views
0

Ich versuche, eine Verbindung zu Azure SQL-Dienst von meinem Django auf Mac OSX. Als ichDjango fügt quadratische Klammern in Abfrage SQL-Server

from photo_mapper.models import Restaurant 
rest_query = Restaurant.objects.all().query 
print rest_query 
SELECT [ate_it.restaurant].[id], [ate_it.restaurant].[name], [ate_it.restaurant].[area], [ate_it.restaurant].[city], [ate_it.restaurant].[submitter], [ate_it.restaurant].[pending], [ate_it.restaurant].[zid] FROM [ate_it.restaurant] 

Durch die nach tun, wenn ich Restaurant.objects.all() bekomme ich

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/models/query.py", line 234, in __repr__ 
    data = list(self[:REPR_OUTPUT_SIZE + 1]) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/models/query.py", line 258, in __iter__ 
    self._fetch_all() 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/models/query.py", line 52, in __iter__ 
    results = compiler.execute_sql() 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/anubhav/workspace/ate-it/venv/lib/python2.7/site-packages/sql_server/pyodbc/base.py", line 538, in execute 
    return self.cursor.execute(sql, params) 
ProgrammingError: ('42S02', "[42S02] [FreeTDS][SQL Server]Invalid object name 'ate_it.restaurant'. (208) (SQLExecDirectW)") 

Allerdings, wenn ich die Abfrage ausführen SELECT * from ate_it.restaurant mit django.db.connections manuell fein läuft. Kann ich verhindern, dass Django die eckigen Klammern hinzufügt?

Meine Datenbank Einstellungen sind

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'mydatabase', 
     'USER' : 'myuser', 
     'PASSWORD' : 'mypwd', 
     'HOST' : 'myserver', 
     'PORT' : '1433', 
    } 
} 

I this link für freetds und unixodbc Setup

+0

welche Pakete und Version sind Sie für Python und Django? Es gibt ein paar; Ich rate pyodbc == 3.0.10, aber welches Django-Paket? Ist 'ate_it.restaurant' eine Kombination aus Schema + Tabellenname? – FlipperPA

+0

Ich benutze Django 1.9.7. ate_it ist das Schema und Restaurant ist der Tabellenname –

Antwort

1

wegen der Pyodbc Dies ist gefolgt. Es generiert den in Anführungszeichen gesetzten Namen von Tabelle, Index oder Spalte. Ändern Sie diese Funktion quote_name in Pyodbc/operations.py Ändern Sie diese Zeile
return '[%s]' % name zu return name