2013-04-01 61 views
8

我想在Python 3.3(Windows 7-64位)上使用SQLAlchemy(使用pyodbc)连接到SQL Server 2012数据库。我能够使用直接pyodbc连接,但在使用SQLAlchemy进行连接时不成功。我有用于数据库访问的dsn文件设置。使用sqlalchemy和pyodbc连接到SQL Server 2012

我成功地连接使用直pyodbc是这样的:

con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') 

对于SQLAlchemy的我曾尝试:

import sqlalchemy as sa 
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') 

create_engine方法实际上并没有建立连接和成功,但 i如果我尝试导致sqlalchemy实际设置连接(如engine.table_names()),但需要一段时间但返回此错误:

DBAPIError: (Error) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)') None None

我不知道哪里出了问题是如何看到什么连接字符串实际上是由sqlalchemy传递给pyodbc。我已经用SQLite和MySQL成功地使用了相同的sqlalchemy类。

在此先感谢!

回答

21

基于文件的DSN字符串被SQLAlchemy解释为服务器名称= c,数据库名称= users

我更喜欢在不使用DSN的情况下进行连接,这是代码迁移过程中处理的少一个配置任务。

这句法作品使用Windows身份验证:

engine = sa.create_engine('mssql+pyodbc://server/database') 

或者使用SQL身份验证:

engine = sa.create_engine('mssql+pyodbc://user:[email protected]/database') 

的SQLAlchemy具有的不同连接字符串选项here一个详尽的解释。

+2

谢谢。 SQL Server实例是唯一不在我正在工作的计算机上的实例,所以我不确定这里是否有有趣的事情发生。只是为了扩大一点你列出的刺激(因为sql服务器实例明显命名) - 'sa.create_engine('mssql + pyodbc:// [机器名] \\ [服务器名]/[数据库]')' –

+1

不必命名。连接并使用配置为“默认实例”的sql server实例更容易。当您将在一台服务器上托管多个SQL Server实例时,需要命名实例。 – marr75

6

我有一个关于连接到MSSQL服务器而不使用DSN并使用Windows身份验证的更新信息。在我的例子中,我有下一个选项: 我的本地服务器名称是“(localdb)\ ProjectsV12”。我从数据库属性中看到的本地服务器名称(我正在使用Windows 10/Visual Studio 2015)。 我的数据库名称是“MainTest1”

engine = create_engine('mssql+pyodbc://(localdb)\ProjectsV12/MainTest1?driver=SQL+Server+Native+Client+11.0', echo=True) 

它在连接到指定的驱动程序需要。 您可能会在找到你的客户端版本:

control panel>Systems and Security>Administrative Tools.>ODBC Data Sources>System DSN tab>Add

看从该表中的SQL本机客户端版本。

+0

这是唯一一个为我工作的人。非常感谢! – Barka