0

LocalDB インスタンスを使用して Python プロジェクトをセットアップしようとしています。ビジネス上の制限により、私は Django 1.8 で使用する MS SQL Server 2014 バックエンドに縛られており、pyodbc ドライバーを使用してそれに接続しようとしています。開発用に SQL サーバーの代わりに LocalDB インスタンスを使用したいのですが、いくつか問題が発生しています。以下の設定で接続できました。

ジャンゴの設定:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'my_db',
        'HOST': '(localdb)\\hands-on',
        'Trusted_Connection': 'yes',
        'PORT': '',
        'OPTIONS': {'driver': 'SQL Server Native Client 11.0',
                    'Integrated Security': 'true',
                    },
        'TEST': {
            'NAME': 'test_my_db',
        },
    }
}

SqlLocalDB.exe を使用してこのインスタンスを作成しました。

Name:               hands-on
Version:            12.0.2000.8
Shared name:
Owner:              COMPANY\MY_ACCOUNT
Auto-create:        No
State:              Stopped
Last start time:    27-12-2016 16:53:55
Instance pipe name:

SSMS を使用してインスタンスに my_db を作成し、接続を確立しました。プレスト!

ただし、少し問題があります。Django アプリケーションを起動すると、自動的に LocalDB インスタンスが起動します (自分のユーザー アカウントのタスク マネージャーで sqlservr.exe が実行されているのを確認できます)。しかし、実行するSqlLocalDB.exe info hands-onと、出力は

State:              Stopped

SSMS を開いて接続すると(LocalDB)\hands-on問題なく接続できますが、タスク マネージャーで2 番目のsqlservr.exe が実行されていることがわかり、現在接続されていることがわかります。したがって、Django/pyodbc と SMSS/SqlLocalDB.exe は、どうにか同じ LocalDB インスタンスの 2 つの別個のインスタンスと対話しているように見えますhands-on

LocalDB インスタンスとそのファイルを削除し、SqlLocalDB.exe で再作成して起動し、Django アプリで接続するという回避策を見つけました。その後、すべてのソフトウェアが同じインスタンスと対話しているように見え、実行されている sqlservr.exe プロセスは 1 つだけです。悲しいことに、この回避策には、間違いを犯して以前に Django を実行するとすぐに機能しなくなるという大きな欠点がありますSqlLocalDB.exe start hands-on。その後、ゴースト インスタンスが再作成され、その瞬間から Django はインスタンスに接続し続けます。インスタンスを強制終了し、SqlLocalDB で起動してから Django に再接続します。ゴースト インスタンスが再び表示されます。したがって、この回避策は非常に脆く、同僚に勧めることはほとんどできません。

何が起こっているのか、問題を解決する方法を知っている人はいますか? DjangoとSQLサーバーを結合しようとしないことは別として、私は意味します:p

4

1 に答える 1

0

問題の原因を突き止めることはできませんでしたが、最終的にはログイン時に小さなスクリプトを実行して問題を回避することにしました。このスクリプトは、作業を行う前に LocalDB インスタンスをポップアップし、その自動シャットダウン タイマーを次のように設定します。気づかれずにシャットダウンしないように、高い値を設定します。Windows 用のバット スクリプトは次のとおりです。

"C:\Program Files\Microsoft SQL Server\120\Tools\Binn\SqlLocalDB.exe" s MSSQLLocalDB

@ECHO OFF

ECHO. > temp.sql
ECHO sp_configure 'show advanced options', 1; >> temp.sql
ECHO GO >> temp.sql
ECHO RECONFIGURE >> temp.sql
ECHO GO >> temp.sql
ECHO sp_configure 'user instance timeout', 65000; >> temp.sql
ECHO GO >> temp.sql
ECHO RECONFIGURE >> temp.sql
ECHO GO >> temp.sql
ECHO EXIT >> temp.sql

ECHO.
"C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.exe" -S (localdb)\MSSQLLocalDB -E -i temp.sql
del temp.sql
于 2017-01-20T10:07:12.003 に答える