我正在尝试使用 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 并建立了连接。快!
但是,有一点问题。当我启动 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 进程正在运行。可悲的是,这种解决方法有一个很大的缺点,即一旦您犯了错误并在之前运行 Django,它就不再工作了SqlLocalDB.exe start hands-on
。然后重新创建 ghost 实例,从那一刻起,Django 一直连接到它,即使你杀死了实例,用 SqlLocalDB 启动它,然后重新连接到 Django;幽灵实例将再次出现。因此,这种解决方法非常脆弱,我几乎无法将其推荐给我的同事。
有没有人知道发生了什么以及如何解决问题?除了不尝试结合 Django 和 SQL 服务器之外,我的意思是:p