2009-05-09 564 views
36

SQL Serverデータベースのバックエンドを使用してDjangoアプリケーションを配備した経験がある人はいますか?私たちの職場はSQL Serverに多額の投資をしており、十分に開発されたバックエンドがない場合、Djangoをサポートしません。DjangoとSQL Serverを組み合わせて使用​​する

私は、非公式にサポートされているバックエンドとしてmssql.django-pyodbcとdjango-mssqlを認識しています。両方のプロジェクトには一人の人しか貢献していないようですが、貢献はやや正直なようですが、少し心配です。

よくサポートされているSQL Serverのバックエンドはありますか?私がここで言及した2つは、生産に「十分に良い」ものですか?あなたの経験は何ですか?

答えて

19

前述したように、django-pyodbcは良い方法です。 PyODBCはPythonのためのおそらく最も成熟したSQL Serverライブラリです。

pyodbcはストアドプロシージャを非常にうまくサポートしていません(呼び出すことはできますが、結果を得る方法はありません)。 はpymssqlを使用して呼び出すことができますが、標準のDB-APIインターフェイスをサポートしておらず、変更の可能性があるため、可能な限り回避します。これを行う必要がある場合は、adodbapiを直接使用することをお勧めします(これはPythonのwin32パッケージに含まれていますが、おそらくインストールされてしまうでしょう)。

+0

「adodbapi」をありがとう - これは私のための新しいものでした。 –

+0

django-mssqlは、adodbapiのフォークを使用し、ストアドプロシージャをサポートしています。 – Manfre

+2

SQLServerのストアドプロシージャから結果を取得するには、次のように呼び出します。 'cursor.execute( 'DECLARE @results int; EXEC @ results = spMyProc; SELECT @results')' –

1

まだ本番環境では使用していませんが、django-mssqlの初期の経験は非常に確かです。必要なのは、Python Win32拡張モジュールだけで、sqlserver_adoモジュールをPythonパスに追加するだけです。そこから、DATABASE_ENGINEとしてsql_server.pyodbcを使用してください。これまでのところ私は何か不足していることに気付かなかったが、私はまだそれを完全には打ち明けていない。

4

私たちは、当社の生産現場でdjango-mssqlを使用しています。私たちもmssqlを使った既存のシステムを持っていました。私にとって個人的には、今まで私が作った最高のデザインの決定だったので、私はdjangoを使用できるようになり、生産性が大幅に向上しました。

私はパッチを提出しましたが、django-mssqlの使用を開始して1〜2週間のテストを行いました。その後(2008年10月)djangoでシステムを実行しています。私もpyodbcを試しましたが、私はあまり好きではありませんでした。

私たちは、すべてのトランザクションがこのシステムを介して実行される修理システムを実行しています。より多くの質問がある場合は、私に知らせてください。

+0

django-mssqlはdjangoの特定のバージョンに結びついていますか? –

+7

django-mssqlではWindowsでdjangoを実行する必要があります。 Linuxでdjangoを実行している場合はどうすればいいですか? –

+0

@Paul、私は選択のみの報告のためにDjangoに接続したい既存のsybaseデータベースを持っています。 django-mssqlを使ってDSNに直接接続することはできますか? – toasteez

4

私が見てきたので、多くの人々は、Windows上でdjango_mssqlをインストールした後、次のエラーを取得:

 
django.core.exceptions.ImproperlyConfigured: 'sqlserver_ado' isn't an available database backend. 
Try using django.db.backends.XXX, where XXX is one of: 
    'dummy', 'mysql', 'oracle', 'postgresql_psycopg2', 'sqlite3' 
Error was: No module named sqlserver_ado.base 

以下のプラグインがインストールされたソリューション:

http://sourceforge.net/projects/pywin32/

+1

この正確なエラーは、リンクはもはや有効ではありません、どこでプラグインを入手できますか? –

+1

@DavidZhanLiu:WebアーカイブによるPython Win32 Extensionsです。 http://sourceforge.net/projects/pywin32/に移動しました。 – SaeX

5

これらの日を

  • django-mssql:結果エラー "NoneType not callable"のとき./manage.py migrate
  • avidal/django-pyodbc:保持されていません。
    • django-pyodbc:に置き換えpythonの3
    • django-pyodbc-azureのためのサポート:私のために働き、これまで
      • EDITは:メンテナンスされていないように思えません。提出されたissue 125ステータスについての質問
      • 編集:メンテナーから返信を得ました。最新のDjangoの2.0すぐ

EDITして説明する。ここでは、パッケージのバージョン

Django==1.11.6 
django-mssql==1.8 
pyodbc==4.0.19 
django-pyodbc==1.1.1 
django-pyodbc-azure==1.11.0.0 
+1

Djangoとテストしたライブラリのバージョンを提供することは役に立ちます。なぜなら、この情報はすぐに時代遅れになる可能性があるからです。 –

1

は、ここでこの質問への「現代」の答えですです。別のサーバで動作するMS SQL Server 2017に接続するUbuntu 16.04サーバにDjango 1.11を正常にデプロイしました。

まず、ネイティブMS ODBCドライバ "SQL Server用のODBCドライバ17" をインストールします。

# https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server#ubuntu-1404-1604-and-1710 
sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - 
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list 
apt-get update 
ACCEPT_EULA=Y apt-get install msodbcsql 
apt-get install unixodbc-dev 

# test you can actually get to port 1433 on the server that is running MS SQL: 
nc -z -v -w5 host.where.sql.server.is.running.com 1433 

# add /opt/mssql-tools/bin to your PATH in .bash_profile, e.g.: 
# PATH="$HOME/bin:$HOME/.local/bin:/opt/mssql-tools/bin:$PATH" 
# source ~/.bash_profile 
# now, test that you can actually connect to MS SQL Server: 
sqlcmd -S host.where.sql.server.is.running.com -U db_username -P db_password 

第二に、あなたはpip installこれらのモジュールを確認してください。

# https://github.com/michiya/django-pyodbc-azure 
django-pyodbc-azure==1.11.9.0 

# https://github.com/mkleehammer/pyodbc/wiki 
pyodbc==4.0.22 

第三に、データベースのエントリを変更しますあなたのDjangoのsettings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'sql_server.pyodbc', 
     'NAME': 'db_name', 
     'USER': 'db_username', 
     'PASSWORD': 'db_password', 
     'HOST': 'host.where.sql.server.is.running.com', 
     'PORT': '1433', 
     'OPTIONS': { 
      'driver': 'ODBC Driver 17 for SQL Server', 
     }, 
    }, 
} 

私は省略しています彼は私の設定(nginx、Gunicorn、Django RESTフレームワークなど)の残りの部分ですが、これはこの回答の範囲外です。

関連する問題