9

別の開発者と私は、別のサーバーでレガシーSQLサーバーデータベース(SQLEXPRESS)を使用してdjango(v1.4.2)プロジェクトをセットアップしています。これまでのところ、django-pyodbcを使用してLinuxとMacから、およびdjango-mssqlを使用してWindows7を実行しているラップトップからデータベースに接続することができました。ラップトップでdjango-pyodbcを使用して、環境の同期を維持したいと思います。

ラップトップの場合:

  • pyodbc(3.0.6)がインストールされており、非django.pyスクリプトでSQLステートメントを接続して実行できます
  • zipをダウンロードしてdjango-pyodbc1.4をダウンロードしました。正しくインストールしたかどうかわかりません:
    • ファイルを解凍し、トップディレクトリでsetup.pyファイルを実行しました。sql_serverディレクトリを/lib/site-packagesディレクトリに配置します
  • このsql_serverディレクトリを/django/ db/backendsにコピーしました
  • / django / db / backends/sql_serverを指すPYTHONPATH環境変数を作成しました
    • 代わりに/site-packages/ sql_serverを指すことになっているのかわかりませんか?
  • ODBCデータソース(システムDSN)を作成しました
    • 接続オプションのテストは機能します
  • settings.pyのDATABASEエントリを、Linuxバージョンとほぼ同じになるように編集しました(詳細は以下を参照)。

そのため、機能せず、次のエラーメッセージが表示され、次に何をすべきかわかりません。

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

djangosettings.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エントリがあります。

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(Windowsでのみ実行されます)を使用すると、(動作する)エントリは次のようになります。

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

1 に答える 1

3

https://github.com/michiya/django-pyodbc-azureを使用してみてください。これは、Linux と Windows の両方で機能するはずです。

次に、データベース設定を次のように定義します。

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

Windows では、'driver'エントリは次のようにOPTIONSなります。

'driver': 'SQL Native Client',

編集:おっと、あなたが問題を解決したことを確認できませんでした。ここに私の答えを参考として残します。

于 2013-09-22T19:36:31.350 に答える