【发布时间】:2015-12-13 08:31:08
【问题描述】:
我正在使用来自here 的pyodbc 库,并且我是这样连接的:
conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};Server=(localdb)\MSSQLLocalDB;Integrated Security=true; database = online_banking; autocommit = True')
我使用MSSQLLocalDB,因为它是 SQL Server 2014 的默认实例名称。以及 Python 2.7 的最后一个版本。
但是我不能运行任何简单的查询,如果他们提出错误,说没有这样的对象或在那个特定的情况下数据库:
cursor.execute('use online_banking;')
完整的错误:
pyodbc.Error: ('08004', "[08004] [Microsoft][SQL Server Native Client 11.0][SQL Server]Database 'online_banking' does not exist. Make sure that the name is entered correctly. (911) (SQLExecDirectW)")
那么这里出了什么问题?
您只能看到 1 个引擎:
upd1 数据库是这样创建的:
CREATE DATABASE [online_banking]
ON PRIMARY
( NAME = N'online_banking', FILENAME = N'C:\...\online_banking.mdf' ,
SIZE = 512000KB , MAXSIZE = UNLIMITED, FILEGROWTH = 30%)
LOG ON
( NAME = N'online_banking_log', FILENAME = N'C:\...\online_banking_log.ldf' ,
SIZE = 1024KB , MAXSIZE = 20GB , FILEGROWTH = 10%)
GO
upd2 我使用了内置工具sqlcmd。
所以这个sqlcmd -S (LocalDB)\MSSQLLocalDB -i C:\Users\1.sql -E 已经表明,
MSSQLLocalDB 没有我的数据库。
但是sqlcmd -S localhost -i C:\Users\1.sql -E 执行成功。
我完全糊涂了,我只安装了一台服务器,而且 SQL Management Studio 只看到一台本地服务器和我的online_banking DB。这对我来说真的很奇怪。
尝试在 Python 中使用此连接字符串
conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 11.0};Server=localhost;Integrated Security=true; database = online_banking; autocommit = True')
导致以下错误:
pyodbc.Error: ('28000', '[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]\x... "". (18456) (SQLDriverConnect); [01S00] [Microsoft][SQL Server Native Client 11.0]\xcd\xe5\xe....xe8\xff (0); [28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]\xce...ff "". (18456); [01S00] [Microsoft][SQL Server Native Client 11.0]\xcd\xe.... (0)'
upd3: 指定的 mdf 应该附上,明白了: 尝试了几种方法,总是错误(在连接字符串中指定或未指定数据库):
conn = pyodbc.connect(
r'Driver={SQL Server Native Client 11.0};Server=(localdb)\MSSQLLocalDB; database =online_banking; AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL12.SQLSERVERINSAF\MSSQL\DATA\online_banking.mdf;Trusted_Connection=Yes; Integrated Security=true; database = online_banking;')
error: A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
我发现,这可能与已经附加了这个数据库的父服务器有关,但未能解决这个问题。
更新4 我尝试了来自here 的简单代码,以查看“online_banking”是否出现在该实例的数据库列表中。但遇到另一个错误:
pyodbc.Error: ('08001', '[08001] [Microsoft][SQL Server Native Client 11.0]\ - 无法读取的错误
【问题讨论】:
-
SQL Server LocalDB 可以有任意数量的命名实例。试试测试代码here,看看“online_banking”是否出现在数据库列表中。
-
启动 SQL Server Browser 服务。启动 SQL Server 管理工作室。在“连接到服务器”对话框中,单击“服务器名称”下拉菜单并选择“”(screenshot)。在“浏览服务器”对话框的“本地服务器”选项卡上,单击“数据库引擎”旁边的“+”。这应该会向您显示本地服务器实例的列表。我的看起来像this。请edit你的问题展示你的问题。
-
太棒了!现在试试测试代码here,看看能不能连接。
-
@GordThompson 这太神奇了))工作正常。我刚刚插入了值,非常感谢。并且不要忘记发布 smth 作为答案以获得 50 分))
标签: python sql-server python-2.7 connection-string pyodbc