当前位置:  开发笔记 > 编程语言 > 正文

pyodbc无法连接到数据库

如何解决《pyodbc无法连接到数据库》经验,为你挑选了1个好方法。

我在这里使用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个实例等 databases(.mdf) 在此输入图像描述 在此输入图像描述

正如你只能看到1个引擎:

在此输入图像描述

选择该引擎将允许我查看online_banking数据库 在此输入图像描述

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数据库的本地服务器.这看起来很奇怪.

试图在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.

我发现,这可能与已连接此数据库的父服务器有关,但未能解决此问题.

upd4 我从这里尝试了简单的代码 ,看看"online_banking"是否显示在该实例的数据库列表中.但面临另一个错误:

pyodbc.Error:('08001','[08001] [Microsoft] [SQL Server Native Client 11.0]\ - 不可读的错误

另外那个数据库 在此输入图像描述根据SSMS似乎已经附加了online_banking DB



1> Gord Thompso..:

事实证明,有问题的数据库已经附加到本地计算机上的SQL Server的默认实例,因此连接所需的全部内容都是

import pyodbc
conn_str = (
    r"Driver={SQL Server Native Client 11.0};"
    r"Server=(local);"
    r"Database=online_banking;"
    r"Trusted_Connection=yes;"
    )
conn = pyodbc.connect(conn_str)

有两个主要的混淆点:

问:SQL Server"默认实例"的名称是什么?

答:没有.

当按名称引用SQL Server实例时,默认实例仅按机器名称,而命名实例由其标识MachineName\InstanceName.因此,在名为的服务器上PANORAMA

如果我们安装SQL Server的"默认实例",我们将其称为PANORAMA.

如果我们安装一个名为"SQLEXPRESS"的"命名实例",我们称之为PANORAMA\SQLEXPRESS.

如果我们在本地机器上引用SQL服务器实例,我们可以使用(local)而不是PANORAMA.

问:(本地)和(localdb)是否意思相同?

答:没有.

(local)(local)\InstanceName参考SQL Server的"真正的"基于服务器的实例.这些是自SQL Server首次发布以来一直存在的实例.它们作为服务运行,能够接受网络连接并完成我们期望数据库服务器执行的所有操作.

(localdb)(localdb)\InstanceName引用 - 为了清晰起见(localdb)通常大写(LocalDB)- 用于连接到"SQL Server LocalDB"实例.这些是主要供开发人员使用的临时本地SQL Server实例.有关详细信息,请参阅以下MSDN博客文章:

SQL Express v LocalDB v SQL Compact Edition

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有