web-dev-qa-db-ja.com

SQL ServerをDjangoで使用して本番環境で使用する

Django SQL Serverデータベースバックエンドを使用したアプリケーションのデプロイに関する最近の経験はありますか?私たちの職場はSQL Serverに多額の投資をしており、Django ifそれに対して十分に開発されたバックエンドはありません。

Mssql.Django-pyodbcとDjango-mssqlは非公式にサポートされているバックエンドとして認識しています。どちらのプロジェクトも1人しか貢献していないようですが、貢献はやや定期的に行われているようですが、少し心配です。

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

46
Josh Smeaton

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

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

21
Jason Baker

最近

  • Django-mssql./manage.py migrateでエラー「NoneType not callable」が発生しました
  • avidal/Django-pyodbc :メンテナンスされていません。と取り換える:
    • Django-pyodbc :python 3のサポートなし
    • Django-pyodbc-Azure :これまでのところ機能します
      • 編集:メンテナンスされていないようです。提出 問題125 ステータスについて尋ねる
      • 編集:メンテナから返信をもらいました。 Django 2.0ですぐに更新されます
      • 編集:メンテナがDjango 2.0のバージョン2.0をリリースしました
      • 編集:メンテナーはバージョン2.1をリリースしましたDjango 2.1

編集:ここにパッケージのバージョンがあります

Django==1.11.6
Django-mssql==1.8
pyodbc==4.0.19
Django-pyodbc==1.1.1
Django-pyodbc-Azure==1.11.0.0
13
shadi

この質問に対する「モダン」な回答を次に示します。私は正常にDjango 1.11を別のサーバーで実行されているMS SQL Server 2017に接続する本番Ubuntu 16.04サーバーにデプロイしました。

最初に、ネイティブMSをインストールしますODBCドライバー "ODBC Driver 17 for SQL Server":

# 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

3番目に、Django settings.py:のDATABASESエントリを変更します。

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',
            'isolation_level': 'READ UNCOMMITTED',  # prevent SELECT deadlocks
        },
    },
}

残りの構成(nginx、Gunicorn、Django REST Frameworkなど))は省略していますが、これはこの回答の範囲外です。

更新:これは本番環境で6か月以上実行されており、複数の接続が同じテーブルでSELECTクエリを実行しているときのMS SQL Server固有のデッドロック以外の問題はありませんでした。これはisolation_level設定で修正されました。システムは毎日約2k人の新規ユーザーを獲得します。

7
Cloud Artisans

WindowsにDjango_mssqlをインストールした後、非常に多くの人が次のエラーを受け取るのを見ました。

 Django.core.exceptions.ImproperlyConfigured:「sqlserver_ado」は利用可能なデータベースバックエンドではありません。
 Django.db.backends.XXXを使用してみてください。 'dummy'、 'mysql'、 'Oracle'、 'postgresql_psycopg2'、 'sqlite3' 
エラーは次のとおりです:sqlserver_ado.base 
という名前のモジュールはありません

解決策は次のプラグインをインストールすることです:

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

4
Suresh

弊社では本番環境でDjango-mssqlを使用しています。 mssqlを使用する既存のシステムもありました。私にとって個人的には、Django。

パッチを提出しましたが、Django-mssqlの使用を開始し、1週間または2週間のテストを行いました。それ以来(2008年10月)、システムをDjangoで実行すると、安定して動作します。また、 pyodbcがあまり好きではなかった。

すべてのトランザクションがこのシステムを介して実行される修復システムを実行しています。他にご不明な点がありましたらお知らせください。

4
Paul

まだ本番環境では使用していませんが、Django-mssqlを使った最初の経験はかなりしっかりしています。必要なのはPython Win32拡張機能であり、sqlserver_adoモジュールをPythonパスに取得するには、そこからsql_server.pyodbcDATABASE_ENGINE。これまでのところ、何も欠けていることに気づいていませんが、まだ完全に攻撃していません。

1
tghw