2016-12-27 14 views
0

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

Djangoの設定:

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に接続すると、接続がうまく行われているが、私のタスクマネージャで、私は今 Sqlservr.exeの走りを見ることができ、これにありそれは私が今接続されていることが判明します。したがって、Django/pyodbcとSMSS/SqlLocalDB.exeは、どちらも同じLocalDBインスタンスの2つの別個のインスタンスとやりとりしているようですが、どちらも報告するのが嬉しくて、hands-onと呼ばれています。

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

誰かが何が起こっているのか、またどのように問題を解決する手掛かりがありますか? DjangoとSQLサーバーを組み合わせようとする以外に、私は次のことを意味します:p

+0

そして、私は見つけたの[この](http://stackoverflow.com/questions/21435121/sqllocaldb-info-lists-two-instances-with-the-same-name:ここでは、Windows用のバットスクリプトがあります)投稿、またはおそらく[これ](http://stackoverflow.com/questions/39974109/how-can-i-specify-to-use-sql-server-localdb-2014-rather-than -sql-server-localdb)の記事を投稿しましたが、これまで私は自分自身で問題を解明できませんでした) – Juul

答えて

0

私は問題の原因を突き止めたことは一度もありませんでしたが、結局私はログイン時に小さなスクリプトを実行して作業が完了する前にLocalDBインスタンスを起動し、自動シャットダウンタイマーを高い値に設定して、気づかないうちにシャットダウンしないようにします。

"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 
関連する問題