Connecting to SQL Server 2012 using sqlalchemy and pyodbc
我正在尝试在Python 3.3(Windows 7-64位)上使用SQLAlchemy(带有pyodbc)连接到SQL Server 2012数据库。 我可以使用直接的pyodbc进行连接,但是无法使用SQLAlchemy进行连接。 我有用于数据库访问的dsn文件设置。
我像这样直接使用pyodbc成功连接:
1 | con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn') |
对于sqlalchemy,我尝试过:
1 2 | import sqlalchemy as sa engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname') |
如果我尝试使sqlalchemy实际设置连接的操作(如
我不确定问题出在哪里,如何查看sqlalchemy实际将哪些连接字符串传递给了pyodbc。 我已经在SQLite和MySQL中成功使用了相同的sqlalchemy类。
提前致谢!
SQLAlchemy将基于文件的DSN字符串解释为服务器名称=
我更喜欢在不使用DSN的情况下进行连接,这是在代码迁移期间要减少的一项配置任务。
使用Windows身份验证可以使用以下语法:
1 | engine = sa.create_engine('mssql+pyodbc://server/database') |
或使用SQL身份验证:
1 | engine = sa.create_engine('mssql+pyodbc://user:password@server/database') |
SQLAlchemy在这里对不同的连接字符串选项进行了详尽的解释。
在Python 3中,您可以使用模块
1 2 3 4 5 6 7 8 | import urllib params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};" "SERVER=dagger;" "DATABASE=test;" "UID=user;" "PWD=password") engine = sa.create_engine("mssql+pyodbc:///?odbc_connect={}".format(params)) |
为了使用Windows身份验证,您想使用Trusted_Connection作为参数:
1 2 3 4 | params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};" "SERVER=dagger;" "DATABASE=test;" "Trusted_Connection=yes") |
在Python 2中,应改为使用库
1 2 3 4 5 | params = urllib.quote_plus("DRIVER={SQL Server Native Client 11.0};" "SERVER=dagger;" "DATABASE=test;" "UID=user;" "PWD=password") |
我没有使用DSN和使用Windows身份验证的有关与MSSQL Server的连接的更新信息。在我的示例中,我有以下选择:
我的本地服务器名称是"(localdb) ProjectsV12"。从数据库属性中看到的本地服务器名称(我正在使用Windows 10 / Visual Studio 2015)。
我的数据库名称是" MainTest1"
1 | 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 Native Client版本。
只想在这里添加一些最新信息:
如果使用DSN连接进行连接:
1 | engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@SOME_DSN") |
如果使用主机名连接进行连接:
1 | engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@HOST_IP:PORT/DATABASENAME?driver=SQL+Server+Native+Client+11.0") |
有关更多详细信息,请参阅"正式文件"