2012-11-15 5 views
9

Ein anderer Entwickler und ich richten ein django (v1.4.2) -Projekt ein, das eine ältere SQL Server-Datenbank (SQLEXPRESS) auf einem anderen Server verwendet. Bisher konnten wir mit django-pyodbc von linux und mac aus mit der Datenbank verbinden und mit django-mssql von einem Laptop mit Windows 7. Ich möchte Django-Pyodbc auf dem Laptop verwenden, um die Umgebungen synchron zu halten.Django-pydobc SQL-Serververbindungsprobleme unter Windows

Auf dem Laptop:

  • Pyodbc (3.0.6) installiert ist und in einem nicht-django Py Skript kann ich anschließen und SQL-Anweisungen ausführen
  • heruntergeladen django-Pyodbc 1.4 durch die Zip-Download ; Ich bin mir nicht sicher, ob ich es richtig installiert habe:
    • Ich entzippte die Datei und führte die Datei setup.py im obersten Verzeichnis aus; es setzt ein sql_server Verzeichnis in/lib/site-packages Verzeichnis
  • dieses sql_server Verzeichnis kopiert/django/db/Backends
  • eine Umgebungsvariable PYTHONPATH auf/django/db/backends/sql_server Erstellt
    • nicht sicher, ob es stattdessen auf/site-packages/sql_server zeigen soll?
  • Erstellt eine ODBC-Datenquelle (System-DSN)
    • Testen der Verbindung Option funktioniert
  • Editted der Datenbankeintrag in settings.py fast genau wie die Linux-Version (siehe unten) zu sein

So funktioniert es nicht, und ich erhalte die folgende Fehlermeldung, und haben keine Ahnung, was als nächstes zu tun:

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

ich Setup die django settings.py Datei wie etwa so:

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

Unter Linux hat meine Einstellungen Datei einen DATABASES Eintrag wie folgt:

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

weiß nicht, ob es wird dies dazu beitragen zu lösen, aber mit django-mSSQL (die nur unter Windows ausgeführt wird), ist der (Arbeits-) Eintritt:

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

Do not wissen, welche anderen Informationen helfen könnten. Vielen Dank für Ihre Hilfe oder Einsicht, die Sie anbieten können.

---- ---- FLEISCH Hier ist, was schließlich arbeitete:

Teil Eintrag in Einstellungen für Datenbanken:

'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

Wenn Sie "post mortem" sind, würde Ihre Frage beantworten, entweder als Antwort hinzufügen und akzeptieren, oder die Frage entfernen (so bleibt es nicht unbeantwortet). – meataxe

Antwort

1

Versuchen https://github.com/michiya/django-pyodbc-azure verwenden. Dies sollte sowohl unter Linux als auch unter Windows funktionieren.

dann Ihre Datenbankeinstellungen als solche definieren:

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

unter Windows die 'driver' Eintrag in OPTIONS sein sollte:

'driver': 'SQL Native Client', 

Edit: Ups, konnte sehen, dass das Sie das Problem gelöst hatte . Lassen Sie meine Antwort hier als Referenz.