2016-12-27 41 views
0

我正在嘗試使用LocalDB實例設置Python項目。由於業務限制,我被綁定到MS SQL Server 2014後端以便與Django 1.8一起使用,並且我試圖用pyodbc驅動程序連接到它。我想用LocalDB實例代替SQL服務器進行開發,但我遇到了一些問題。我得到了以下設置的連接。Django + pyodbc + MS LocalDB ghost實例

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實例的兩個單獨實例交互,這兩個實例都非常高興報告稱爲hands-on

我發現其中包括刪除LocalDB實例和它的文件,然後重新創建與SqlLocalDB.exe啓動它,然後才連接到它與我的Django應用程序的解決方法。然後,所有軟件似乎都與同一個實例進行交互,並且只有一個sqlservr.exe進程正在運行。可悲的是,這個解決方法有一個很大的缺點,就是在你犯了一個錯誤並且在SqlLocalDB.exe start hands-on之前運行Django後就不能工作了。然後重新創建ghost實例,從Django的那一刻開始連接它,即使你殺了實例,用SqlLocalDB啓動它,然後重新連接到Django;鬼實例將再次出現。所以這個解決方法非常脆弱,我很難去推薦給我的同事。

有沒有人知道正在發生什麼事以及如何解決問題?除了不試圖Django和SQL服務器合併,我的意思是:對

+0

而且我也發現[這](http://stackoverflow.com/questions/21435121/sqllocaldb-info-lists-two-instances-with-the-same-name )後可能是一個相關的問題,或者[這](http://stackoverflow.com/questions/39974109/how-can-i-specify-to-use-sql-server-localdb-2014-rather-than -sql-server-localdb)後,但到目前爲止我還沒有能夠自己揭開這個問題的神祕面紗) – Juul

回答

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