使用sqlalchemy.engine.url.URL为mssql + pyodbc建立连接URL [英] Building a connection URL for mssql+pyodbc with sqlalchemy.engine.url.URL

查看:291
本文介绍了使用sqlalchemy.engine.url.URL为mssql + pyodbc建立连接URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过SQLAlchemy连接到MSSql服务器。这是我的带有伪造凭据的代码(显然不是我的真实凭据)。

I am trying to connect to a MSSql server via SQLAlchemy. Here is my code with fake credentials (not my real credentials obviously).

credentials = {
'username'  : 'SPOTTER_xyz_ACC',
'password'  : '123Goodbye2016!@#',
'host'      : 'MARYLQLT01',
'database'  : 'LRS_DUS',
'port'      : '1560'}

connect_url = sqlalchemy.engine.url.URL(
    'mssql+pyodbc',
    username=credentials['username'],
    password=credentials['password'],
    host=credentials['host'],
    port=credentials['port'],
    query=dict(service_name=credentials['database']))

engine = create_engine(connect_url)
connection=engine.connect()

这是我得到的.pyodbc错误。

And this is the .pyodbc error that I am getting.

(pyodbc.Error) ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source
name not found and no default driver specified (0) (SQLDriverConnect)')



其他详细信息



但是,这是很奇怪的...如果我建立了一个pyodbc连接并使用了Pandas.read_sql,那么我可以毫无错误地获取数据。所以我不明白为什么会收到'pyodbc'错误????

Additional Details

But, here is what is weird... I if make a pyodbc connection and use Pandas.read_sql, then I can get data without an error. So I do not understand why I am getting a 'pyodbc' error????

connection=pyodbc.connect(\
                          'Driver={SQL Server}; \
                          Server=MARYLQLT01; \
                          Database=LRS_DUS; \
                          UID=SPOTTER_xyz_ACC; \
                          PWD=123Goodbye2016!@#')

stmt='select * from PD_SC_All'
df=pd.read_sql(stmt,connection)

然后我可以看到数据框。

And then I can see the dataframe.

所以,为什么我得到(pyodbc.Error)当我尝试连接SQLAlchemy吗?

So, why am I getting the (pyodbc.Error) when I try to connect with SQLAlchemy?

Windows 7
SQLAlchemy: 1.1.11
pyodbc: 4.0.16

Python 3.6.1 |Anaconda custom (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)]
Type "copyright", "credits" or "license" for more information.

IPython 5.3.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.


推荐答案

SQLAlchemy文档,用于 mssql + pyodbc 连接


基于主机名的连接不受欢迎,但受支持。必须明确指定ODBC驱动程序名称:

Hostname-based connections are not preferred, however are supported. The ODBC driver name must be explicitly specified:

engine = create_engine("mssql+pyodbc://scott:tiger@myhost:port/databasename?driver=SQL+Server+Native+Client+10.0")


对于

credentials = {
    'username': 'scott',
    'password': 'tiger',
    'host': 'myhost',
    'database': 'databasename',
    'port': '1560'}

您的语句

connect_url = sqlalchemy.engine.url.URL(
    'mssql+pyodbc',
    username=credentials['username'],
    password=credentials['password'],
    host=credentials['host'],
    port=credentials['port'],
    query=dict(service_name=credentials['database']))

生成 connect_url

mssql+pyodbc://scott:tiger@myhost:1560?service_name=databasename

您真正需要的是

connect_url = sqlalchemy.engine.url.URL(
    'mssql+pyodbc',
    username=credentials['username'],
    password=credentials['password'],
    host=credentials['host'],
    port=credentials['port'],
    database=credentials['database'],
    query=dict(driver='SQL+Server'))

产生

mssql+pyodbc://scott:tiger@myhost:1560/databasename?driver=SQL+Server

这篇关于使用sqlalchemy.engine.url.URL为mssql + pyodbc建立连接URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆