Building a connection URL for mssql+pyodbc with sqlalchemy.engine.url.URL

狂风中的少年 提交于 2019-12-03 00:44:46

As stated in the SQLAlchemy documentation, for mssql+pyodbc connections

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")

For

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

your statement

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']))

produces the connect_url

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

What you really need is

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'))

which produces

mssql+pyodbc://scott:tiger@myhost:1560/databasename?driver=SQL+Server
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!