我正在尝试使用LocalDB实例设置Python项目。由于业务限制,我与MS SQL Server 2014后端绑定以与Django 1.8一起使用,并且我尝试使用pyodbc驱动程序连接到它。我想使用LocalDB实例而不是SQL服务器进行开发,但我遇到了一些问题。我使用以下设置进行连接。
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并建立了连接。的Presto!
但是,有一个问题。当我启动Django应用程序时,它会自动启动LocalDB实例(我可以在我的用户帐户下看到在任务管理器中运行的sqlservr.exe)。但是当我运行SqlLocalDB.exe info hands-on
时,输出是
State: Stopped
当我打开SSMS并连接到(LocalDB)\hands-on
时,连接正常,但在我的任务管理器中,我现在可以看到第二个 sqlservr.exe正在运行,事实证明我和#39;现在连接。因此,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服务器之外,我的意思是:p
答案 0 :(得分:0)
我从未设法找出问题所在,但最终我决定通过在登录时运行一个小脚本来解决问题,该脚本在任何工作完成之前弹出一个LocalDB实例,并设置其自动 - 关闭计时器到高值,这样它就不会被忽视。这是Windows的bat脚本:
"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