2016-07-04 5 views
0

私はMac OS X上で私のdjangoからAzure SQLサービスに接続しようとしています。 私が行うとき、私はこれのためにDjangoは、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] 

を次のようにしますRestaurant.objects.all()私はしかし、私は手動でそれが正常に動作django.db.connectionsを使用してクエリSELECT * from ate_it.restaurantを実行すると

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

を取得します。 djangoが角括弧を追加するのを防ぐことができます。

私のデータベースの設定が

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

ている私は、これが原因pyodbcであるFreeTDSのとunixODBCのセットアップのためのthis link

+0

にこのライン
return '[%s]' % nameをこの関数quote_nameを修正しますか?いくつかあります;私はpyodbc == 3.0.10を推測していますが、どのDjangoパッケージですか? 'ate_it.restaurant'はスキーマ+テーブル名の組み合わせですか? – FlipperPA

+0

私はDjango 1.9.7を使用しています。 ate_itはスキーマであり、レストランはテーブル名です –

答えて

1

を追いました。これは、表、索引または列の引用符で囲まれた名前を生成します。 pyodbc/operations.py 変更であなたは、PythonとDjangoのために使用しているどのようなパッケージとバージョンreturn name

関連する問題