Django добавляет квадратные скобки при запросе сервера sql

Я пытаюсь подключиться к службе azure sql с моего django на mac osx. Когда я следую

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]

Из-за чего, когда я делаю Restaurant.objects.all(), я получаю

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)")

Однако когда я вручную запускаю запрос SELECT * from ate_it.restaurant с помощью django.db.connections, он работает нормально. Могу ли я запретить django добавлять квадратные скобки.

Мои настройки базы данных

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

Я перешел по этой ссылке для установки freetds и unixodbc.


person Anubhav Agarwal    schedule 04.07.2016    source источник
comment
Какие пакеты и версию вы используете для Python и Django? Есть несколько; Я предполагаю pyodbc == 3.0.10, но какой пакет Django? ate_it.restaurant - это комбинация "схема + имя таблицы"?   -  person FlipperPA    schedule 05.07.2016
comment
Я использую Django 1.9.7. ate_it - это схема, а restaurant - имя стола   -  person Anubhav Agarwal    schedule 05.07.2016


Ответы (1)


Это из-за файла pyodbc. Он генерирует цитируемое имя таблицы, индекса или столбца. Измените эту функцию quote_name в pyodbc / operations.py Измените эту строку
return '[%s]' % name на return name

person Anubhav Agarwal    schedule 04.07.2016