別の開発者と私は、別のサーバーでレガシー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'