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

时间:2018-04-20 17:42:00

标签: python sql-server sqlalchemy pyodbc

我正在尝试使用pandas.read_sql_table从MS SQL Server获取数据(服务器在网络上)。我使用Windows身份验证来访问服务器。 Pandas read_sql_table将SQL Alchemy连接作为“连接”的参数。我很难找到一个结合的例子:

  1. SQL Alchemy
  2. MS SQL Server
  3. DSN(“首选”)     根据SQL Alchemy规范)
  4. Windows身份验证
  5. 我咨询了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)(SQLDriverConnect)')(关于此错误的背景:   http://sqlalche.me/e/rvf5

    特别令人困惑的是没有指定默认驱动程序的注释。当我使用此DSN格式时,这些示例均未指定默认驱动程序。

    我已经咨询了这个例子,但对我来说也失败了:How do I connect to SQL Server via sqlalchemy using Windows Authentication?

    我可以很好地与SSMS联系。我正在使用python 3.6。

2 个答案:

答案 0 :(得分:4)

我找到了解决问题的方法。在这里发布给其他人'参考

此代码有效。但是,我无法明确地避免明确指定驱动程序。

sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+13+for+SQL+Server')

答案 1 :(得分:0)

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

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)