2012-11-15 12 views
9

Inny programista i ja konfigurujemy projekt django (v1.4.2) przy użyciu starszej bazy danych serwera SQL (SQLEXPRESS) na innym serwerze. Do tej pory udało nam się połączyć z bazą danych z linux i mac używając django-pyodbc oraz z laptopa z systemem Windows 7 przy użyciu django-mssql. Chciałbym użyć django-pyodbc na laptopie, aby zachować synchronizację środowisk.Problemy z połączeniem z serwerem SQL Django-pydobc w systemie Windows

na laptopie:

  • pyodbc (3.0.6) jest zainstalowany i nie-django .py skryptu mogę podłączyć i uruchomić SQL
  • Pobrano django-pyodbc 1,4 pobierając zip ; Nie jestem pewien, czy zainstalowałem go poprawnie:
    • Rozpakowałem plik i uruchomiłem plik setup.py w górnym katalogu; Stawia katalog sql_server w katalogu/lib/site-packages
  • Skopiowane tego katalogu sql_server do/django/db/backendy
  • Utworzony środowiska PYTHONPATH zmienna wskazującego/django/db/backendy/sql_server
    • nie jesteś pewien, czy ma on zamiast tego wskazywać na/site-packages/sql_server?
  • Utworzono źródło danych ODBC (System DSN)
    • testowania opcję połączenie działa
  • editted pozycję bazy danych w settings.py się niemal identycznie jak wersja Linux (szczegóły poniżej)

Tak, to nie działa i pojawia się następujący komunikat o błędzie i nie mają pojęcia, co robić dalej:

('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)') 

I skonfigurować plik settings.py Django jak tak:

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

na Linuksie, mój plik ustawień posiada wpis BAZY tak:

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 
     } 
    }, 
} 

nie wiem, czy to pomoże rozwiązać ten problem, ale przy użyciu django MSSQL (który działa tylko w systemie Windows), The (roboczy) wpisu:

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'} 
    }, 
} 

nie wiedzieć, jakie inne informacje mogą pomóc. Dziękuję za pomoc lub wgląd, który możesz zaoferować.

---- POST mortem ---- Oto, co ostatecznie pracował:

częściowe wejście w ustawienia dla baz danych:

'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

Jeśli jesteś "pośmiertny", odpowiedziałbyś na twoje pytanie, dodaj je jako odpowiedź i zaakceptuj lub usuń pytanie (aby nie pozostało bez odpowiedzi). – meataxe

Odpowiedz

1

Spróbuj użyć https://github.com/michiya/django-pyodbc-azure. Powinno to działać zarówno w systemie Linux, jak i Windows.

Następnie zdefiniować ustawienia bazy danych jako takie:

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 
     } 
    } 
} 

Pod Windows wpis w OPTIONS'driver' powinno być:

'driver': 'SQL Native Client', 

Edit: Ups, nie udało się zobaczyć, że trzeba było rozwiązać problem . Pozostawiając moją odpowiedź tutaj jako odniesienie.

Powiązane problemy