我正在尝试在Python 3.3(Windows 7-64位)上使用SQLAlchemy(带有pyodbc)连接到SQL Server 2012数据库。我可以使用直接的pyodbc进行连接,但是无法使用SQLAlchemy进行连接。我有用于数据库访问的dsn文件设置。

我像这样直接使用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方法实际上并未建立连接并成功,但是
如果我尝试使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类。

提前致谢!

最佳答案

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

我更喜欢在不使用DSN的情况下进行连接,这是在代码迁移期间要减少的一项配置任务。

使用Windows身份验证可以使用以下语法:

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

或使用SQL身份验证:
engine = sa.create_engine('mssql+pyodbc://user:password@server/database')

SQLAlchemy对不同的连接字符串选项here进行了详尽的解释。

07-24 09:51
查看更多