我正在使用来自这里的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个引擎:
更新1 数据库是这样创建的:
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
更新2:我使用了内置工具sqlcmd
。 因此,这个sqlcmd -S (LocalDB)\MSSQLLocalDB -i C:\Users\1.sql -E
已经显示,MSSQLLocalDB
中没有我的数据库。然而,
sqlcmd -S localhost -i C:\Users\1.sql -E
成功执行。 我完全困惑了,我只安装了一个服务器,而且SQL管理工具只看到一个名为online_banking
的本地服务器。这对我来说真的很奇怪。尝试在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)'
更新3: 指定的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 我尝试了这里的简单代码,以查看“online_banking”是否显示在该实例的数据库列表中。 但是遇到了另一个错误:
pyodbc.Error:('08001','[08001] [Microsoft] [SQL Server Native Client 11.0] \ - 不可读错误
online_banking
数据库是在名为SQLSERVERINSAF
的“常规”(而不是“LocalDB”)SQL Server实例中创建的。尝试使用此处的示例代码(http://pastebin.com/nJr4Pdge)查看“online_banking”是否显示在*该*实例的数据库列表中。如果没有,请在SQL Server Management Studio(SSMS)中打开(local)\SQLSERVERINSAF
并附加它。 - Gord Thompson