2016-12-27 14 views
0

LocalDB 인스턴스를 사용하여 Python 프로젝트를 설정하려고합니다. 비즈니스 제한으로 인해 Django 1.8과 함께 사용하기 위해 MS SQL Server 2014 백엔드에 묶여 있으며 pyodbc 드라이버를 사용하여 연결하려고합니다. 개발을 위해 SQL Server 대신 LocalDB 인스턴스를 사용하고 싶지만 몇 가지 문제가 있습니다. 다음 설정을 사용하여 연결이 이루어졌습니다.Django + pyodbc + MS 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를 실행할 때 내가 SSMS 열고 연결이 잘 만들어하지만 내 작업 관리자에서 내가 지금 sqlservr.exe를 실행을 볼 수 있습니다 (LocalDB)\hands-on에 연결할 때, 출력되는,

State:    Stopped 

입니다 내가 지금 연결 됐어. 따라서 Django/pyodbc와 SMSS/SqlLocalDB.exe는 어떻게 든 동일한 LocalDB 인스턴스의 두 개의 개별 인스턴스와 상호 작용하는 것처럼 보입니다. 두 인스턴스는 모두 hands-on이라고합니다.

LocalDB 인스턴스와 해당 파일을 삭제 한 다음 SqlLocalDB.exe로 다시 만들고 시작한 다음 내 장고 앱으로 연결하기 만하면 해결 방법을 발견했습니다. 그런 다음 모든 소프트웨어가 동일한 인스턴스와 상호 작용하는 것처럼 보이고 하나의 sqlservr.exe 프로세스 만 실행됩니다. 슬프게도이 해결 방법은 실수를하고 장고를 SqlLocalDB.exe start hands-on 전에 실행하자마자 더 이상 작동하지 않는다는 큰 결점이 있습니다. 고스트 인스턴스가 다시 생성되고 Django의 그 순간부터 인스턴스를 종료하고 SqlLocalDB로 시작한 다음 Django로 다시 연결하더라도 연결이 유지됩니다. 유령 인스턴스가 다시 나타납니다. 따라서이 해결 방법은 매우 약해서 거의 갈 수 없어 내 동료에게 권장 할 수 있습니다.

아무도 어떤 일이 벌어지고 있는지 그리고 문제를 해결하는 방법에 대한 단서가 있습니까? Django와 SQL 서버를 결합하려고 시도한 것 말고는 :

+0

그리고 [이] (http://stackoverflow.com/questions/21435121/sqllocaldb-info-lists-two-instances-with-the-same-name을 찾았어요 다음은 Windows 용 박쥐 스크립트입니다) 관련 게시물 또는 아마도 [this] (http://stackoverflow.com/questions/39974109/how-can-i-specify-to-use-sql-server-localdb-2014-rather-than -sql-server-localdb) post하지만 지금까지는 문제를 직접 설명 할 수 없었습니다. – 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