代码之家  ›  专栏  ›  技术社区  ›  Jimmy

使用Windows身份验证通过Python中的SQL Alchemy连接到网络上的MS SQL

  •  0
  • Jimmy  · 技术社区  · 7 年前

    我正在尝试使用熊猫。read\u sql\u table可从MS sql Server(服务器位于网络上)获取数据。我使用Windows身份验证访问服务器。Pandas read\u sql\u表将sql Alchemy连接作为连接的参数。我很难找到一个结合了以下内容的示例:

    1. SQL炼金术
    2. MS SQL Server
    3. DSN(首选 符合SQL炼金术的规范)
    4. Windows身份验证

    我参考了SQL Alchemy,它展示了一个使用SQL身份验证而不是Windows身份验证的示例。 http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#connecting-to-pyodbc 以下是我尝试过的各种选择。全部返回错误。

    import pandas as pd
    from sqlalchemy import create_engine
    import pyodbc
    # set some variables
    dbname = 'mydbname'
    schemaname = 'myschemaname'
    servername = 'myservername'
    tablename = ‘mytablename’
    
    sqlcon = create_engine('mssql+pyodbc://@' + servername)
    #sqlcon = create_engine('mssql+pyodbc://' + servername + '/' + dbname)
    #sqlcon = create_engine('mssql+pyodbc://' + servername)
    #sqlcon = create_engine('mssql://' + servername + '/' + dbname + '?trusted_connection=yes')
    #sqlcon = create_engine('mssql+pyodbc://' + servername + '/' + dbname + '?trusted_connection=yes')
    mydataframe = pd.read_sql_table(tablename,con=sqlcon,schema=schemaname)
    

    我得到的错误是:

    (pyodbc.InterfaceError)('IM002','IM002][Microsoft][ODBC驱动程序 管理器]未找到数据源名称,未指定默认驱动程序 (0)(SqlDriverConnection)“”)(此错误的背景信息位于: http://sqlalche.me/e/rvf5 )

    尤其令人困惑的是,关于没有指定默认驱动程序的评论。当我使用此DSN格式时,没有一个示例提到指定默认驱动程序。

    我参考了这个例子,但对我来说也是失败的: How do I connect to SQL Server via sqlalchemy using Windows Authentication?

    我可以很好地与SSMS连接。我正在使用python 3.6。

    2 回复  |  直到 7 年前
        1
  •  9
  •   Jimmy    7 年前

    我找到了问题的答案。在此发布供其他人参考。

    此代码有效。不过,我无法避免显式指定驱动程序。

    sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+13+for+SQL+Server')
    
        2
  •  1
  •   ChandraPrakash    4 年前

    如果您对驱动程序版本感到困惑,可以使用以下代码

    username=<username>
    password=<password>
    server=<servername> | <host:port> 
    database=<database>
    
    #below code is with authentication
    engine = create_engine('mssql+pyodbc://'+username+':'+password+'@' + server + '/' + database + '?driver=SQL+Server')
    query = '''select * from <table>'''
    result = engine.execute(query)
    
    
    #below code is without authentication
    engine = create_engine('mssql+pyodbc://@' + server + '/' + database + '?driver=SQL+Server')
    query = '''select * from <table>'''
    result = engine.execute(query)