2012-11-15 12 views
9

पर Django-pydobc SQL सर्वर कनेक्शन समस्याएं एक और डेवलपर और मैं किसी अन्य सर्वर पर एक विरासत SQL सर्वर डेटाबेस (SQLEXPRESS) का उपयोग कर एक django (v1.4.2) प्रोजेक्ट स्थापित कर रहा हूं। अब तक, हम django-pyodbc का उपयोग करके लिनक्स और मैक से डेटाबेस से कनेक्ट करने में सक्षम हैं, और django-mssql का उपयोग कर एक लैपटॉप चल रहे विंडोज 7 से। वातावरण को सिंक में रखने के लिए मैं लैपटॉप पर django-pyodbc का उपयोग करना चाहता हूं।विंडोज़

लैपटॉप पर:

  • pyodbc (3.0.6) स्थापित किया गया है और एक गैर Django .py लिपि में मैं कनेक्ट और एसक्यूएल बयान चला सकते हैं
  • डाउनलोड किया Django-pyodbc 1.4 जिप डाउनलोड करके ; मुझे यकीन नहीं है कि मैंने इसे सही स्थापित किया है:
    • मैंने फ़ाइल को अनजिप किया, और शीर्ष निर्देशिका में setup.py फ़ाइल चलाई; यह/lib/साइट-संकुल निर्देशिका
  • इस sql_server निर्देशिका कॉपी किया गया में एक sql_server निर्देशिका डालता है करने के लिए/Django/db/बैकेंड
  • एक PYTHONPATH वातावरण चर की ओर इशारा करते निर्मित करने के लिए/Django/db/बैकेंड/sql_server
    • यह सुनिश्चित नहीं है कि इसके बजाय/साइट-पैकेज/sql_server को इंगित करना है या नहीं?
  • बनाया गया एक ODBC डेटा स्रोत (सिस्टम DSN)
    • कनेक्शन विकल्प का परीक्षण
  • उसे संपादित settings.py में डेटाबेस प्रविष्टि लगभग ठीक लिनक्स संस्करण की तरह बनना काम करता है (विवरण नीचे)

तो, यह काम नहीं करता है, और मैं निम्न त्रुटि संदेश मिलता है, और पता नहीं आगे क्या करना है है:

('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect); [01000] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (Connect()). (53); [01S00] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0)') 

मैं सेटअप इसलिए की तरह के रूप में Django settings.py फ़ाइल:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sql_server.pyodbc', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': 'mssqlx', 
     'PORT': '12345', 
     'OPTIONS': { 
      'driver': 'SQL Server', 
     }, 
    }, 
} 

linux पर, अपनी सेटिंग्स फ़ाइल इसलिए की तरह एक डेटाबेस प्रविष्टि है:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sql_server.pyodbc', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': 'mssqlx',  # ODBC DSN defined in /etc/freetds.conf 
     'PORT': '12345',  # Probably unneeded. Set in mssqlx 
     'OPTIONS': { 
      'driver': 'SQL Server', # ODBC driver name in /etc/odbcinst.ini 
      'extra_params': "TDS_VERSION=7.0" # Probably unneeded. Set in mssqlx 
     } 
    }, 
} 

पता नहीं है अगर यह में मदद मिलेगी इस का समाधान, लेकिन Django-mssql (जो केवल खिड़कियों पर चलाता है) का उपयोग कर, (काम) प्रविष्टि है:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlserver_ado', 
     'NAME': 'test', 
     'USER': 'test', 
     'PASSWORD': 'something_else', 
     'HOST': '199.555.0.10',   # changed for this example 
     'PORT': '12345', 
     'OPTIONS': {'provider': 'SQLOLEDB'} 
    }, 
} 

नहीं पता है कि अन्य जानकारी क्या मदद कर सकती है। किसी भी मदद या अंतर्दृष्टि के लिए धन्यवाद जो आप पेश कर सकते हैं।

---- पोस्टमार्टम ---- यहाँ अंत में काम किया है: डेटाबेस के लिए सेटिंग्स में

आंशिक प्रविष्टि:

'default': { 
     'ENGINE' : 'django.db.backends.sql_server.pyodbc', 
     'NAME'  : 'test_db_name', 
     'USER'  : 'test_db_user_name', 
     'PASSWORD' : 'password', 
     # ODBC DSN defined in /etc/freetds.conf 
     'HOST'  : 'mssql_test', 
     # Ignored for Windows; Required for Linux 
     'OPTIONS' : { 
      # ODBC driver name in /etc/odbcinst.ini 
      'driver': 'SQL Server', 
      # NOTE: dsn option is added dynamically later, for Windows 
     } 
    }, 

# The ODBC DSN name specified above as DATABASES.default.HOST is ignored on 
# Windows, where it must be specified as DATABASES.default.OPTIONS.dsn instead. 
# However, we haven't found a way to make DATABASES.default.OPTIONS.dsn work in 
# Linux (and probably the same for Mac). It causes the error: 
# Data source name not found, and no default driver specified 
# Therefore we add it here, but only for Windows. 
# Note: The username and pwd in the windows dsn file is apparently NOT used 
#  (b/c server hosts both test and prod database in same MSSQL 
#  instance, both test and prod dsn files happen to work - they have the 
#  same ip address and port number, but different username/password's) 
# 
# On 64-bit Windows, with our current 32-bit version of pyodbc, the DSN 
# must be created via: 
# C:\Windows\SysWOW64\odbcad32.exe 
# instead of the regular "ODBC Data Sources" app in Control Panel, which 
# invokes: 
# C:\Windows\system32\odbcad32.exe 
# 
# os.name is... 
#  nt  for Hans' laptop (Windows 7) 
#  posix for the "Amazon Linux AMI" (CentOS) on AWS 
#  posix for Fred's Mac 
if os.name == 'nt':  # Windows 
    DATABASES['cf']['OPTIONS']['dsn'] = 'mssql_test' 
+4

यदि आप "पोस्ट मॉर्टम" हैं तो अपने प्रश्न का उत्तर देंगे, या तो इसे एक उत्तर के रूप में जोड़ें और इसे स्वीकार करें, या प्रश्न को हटा दें (इसलिए यह अनुत्तरित के रूप में नहीं लटका है)। – meataxe

उत्तर

1

https://github.com/michiya/django-pyodbc-azure का उपयोग करें। यह लिनक्स और विंडोज दोनों पर काम करना चाहिए।

तो इस तरह के रूप में अपने डेटाबेस सेटिंग निर्धारित करें:

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'dbname', 
     'HOST': 'dsn_entry', 
     'PORT': 'port', 
     'USER': '', 
     'PASSWORD': 'pass', 
     'OPTIONS': { 
      'driver': 'FreeTDS', 
      'dsn': 'dsn_entry', 
      'host_is_server': True 
     } 
    } 
} 

विंडोज के तहत OPTIONS में 'driver' प्रवेश होना चाहिए:

'driver': 'SQL Native Client', 

संपादित करें: ओह, यह देखने के लिए कि आप समस्या को हल किया था विफल रहा है । संदर्भ के रूप में मेरा जवाब छोड़कर।