Bra*_*ell 21 python sql-server sqlalchemy pyodbc
我正在尝试使用Python 3.3(Windows 7-64位)上的SQLAlchemy(使用pyodbc)连接到SQL Server 2012数据库.我能够使用直接pyodbc进行连接,但是在使用SQLAlchemy进行连接时却没有成功.我有数据库访问的dsn文件设置.
我使用这样的直接pyodbc成功连接:
con = pyodbc.connect('FILEDSN=c:\\users\\me\\mydbserver.dsn')
Run Code Online (Sandbox Code Playgroud)
对于sqlalchemy,我尝试过:
import sqlalchemy as sa
engine = sa.create_engine('mssql+pyodbc://c/users/me/mydbserver.dsn/mydbname')
Run Code Online (Sandbox Code Playgroud)
该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类.
提前致谢!
Bry*_*yan 32
SQLAlchemy将基于文件的DSN字符串解释为服务器名称= c,数据库名称= users.
我更喜欢在不使用DSN的情况下进行连接,这是在代码迁移期间处理的一项配置任务.
此语法使用Windows身份验证:
engine = sa.create_engine('mssql+pyodbc://server/database')
Run Code Online (Sandbox Code Playgroud)
或者使用SQL身份验证:
engine = sa.create_engine('mssql+pyodbc://user:password@server/database')
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 在此处对不同的连接字符串选项进行了详尽的说明.
And*_*rew 18
我有一个关于与MSSQL Server的连接的更新信息,而不使用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)
Run Code Online (Sandbox Code Playgroud)
需要指定连接中的驱动程序.您可以在以下位置找到客户端版本:
控制面板>系统和安全>管理工具.> ODBC数据源>系统DSN选项卡>添加
从列表中查看SQL Native客户端版本.
小智 18
在Python 3中,您可以使用quote_plus模块中的函数urllib.parse来创建连接参数:
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))
Run Code Online (Sandbox Code Playgroud)
要使用Windows身份验证,您希望使用Trusted_Connection作为参数:
params = urllib.parse.quote_plus("DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"Trusted_Connection=yes")
Run Code Online (Sandbox Code Playgroud)
在Python 2中,您应该使用quote_plus库中的函数urllib:
params = urllib.quote_plus("DRIVER={SQL Server Native Client 11.0};"
"SERVER=dagger;"
"DATABASE=test;"
"UID=user;"
"PWD=password")
Run Code Online (Sandbox Code Playgroud)
只想在这里添加一些最新信息:如果您使用 DSN 连接进行连接:
engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@SOME_DSN")
Run Code Online (Sandbox Code Playgroud)
如果您使用主机名连接进行连接:
engine = create_engine("mssql+pyodbc://USERNAME:PASSWORD@HOST_IP:PORT/DATABASENAME?driver=SQL+Server+Native+Client+11.0")
Run Code Online (Sandbox Code Playgroud)
详情请参阅“官方文档”
| 归档时间: |
|
| 查看次数: |
63969 次 |
| 最近记录: |