使用 Windows 身份验证在 Python 中使用 SQL Alchemy 连接到网络上的 MS SQL
Connect to MS SQL on a network with SQL Alchemy in Python using Windows Authentication
我正在尝试使用 pandas.read_sql_table 从 MS SQL 服务器(服务器在网络上)获取数据。我使用 Windows 身份验证来访问服务器。 Pandas read_sql_table 将 SQL Alchemy 连接作为“连接”的参数。我很难找到结合以下内容的示例:
- SQL 炼金术
- MS SQL 服务器
- DSN(“首选”
根据 SQL 炼金术)
的规范
- Windows 认证
我查阅了 SQL Alchemy,它显示了一个使用 SQL 身份验证但未使用 Windows 身份验证的示例。 http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#connecting-to-pyodbc
以下是我尝试过的各种选项。全部return一个错误。
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 Driver
Manager] Data source name not found and no default driver specified
(0) (SQLDriverConnect)') (Background on this error at:
http://sqlalche.me/e/rvf5)
特别令人困惑的是没有指定默认驱动程序的评论。 None 的示例是指在我使用此 DSN 格式时指定默认驱动程序。
我参考了这个例子,对我来说也是失败的:How do I connect to SQL Server via sqlalchemy using Windows Authentication?
我可以很好地连接 SSMS。我正在使用 python 3.6.
我找到了问题的解决方案。发在这里供其他人参考。
此代码有效。不过,我无法避免明确指定驱动程序。
sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+13+for+SQL+Server')
如果您对驱动程序版本感到困惑,您可以使用下面的代码
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)
我正在尝试使用 pandas.read_sql_table 从 MS SQL 服务器(服务器在网络上)获取数据。我使用 Windows 身份验证来访问服务器。 Pandas read_sql_table 将 SQL Alchemy 连接作为“连接”的参数。我很难找到结合以下内容的示例:
- SQL 炼金术
- MS SQL 服务器
- DSN(“首选” 根据 SQL 炼金术) 的规范
- Windows 认证
我查阅了 SQL Alchemy,它显示了一个使用 SQL 身份验证但未使用 Windows 身份验证的示例。 http://docs.sqlalchemy.org/en/latest/dialects/mssql.html#connecting-to-pyodbc 以下是我尝试过的各种选项。全部return一个错误。
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 Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') (Background on this error at: http://sqlalche.me/e/rvf5)
特别令人困惑的是没有指定默认驱动程序的评论。 None 的示例是指在我使用此 DSN 格式时指定默认驱动程序。
我参考了这个例子,对我来说也是失败的:How do I connect to SQL Server via sqlalchemy using Windows Authentication?
我可以很好地连接 SSMS。我正在使用 python 3.6.
我找到了问题的解决方案。发在这里供其他人参考。
此代码有效。不过,我无法避免明确指定驱动程序。
sqlcon = create_engine('mssql+pyodbc://@' + servername + '/' + dbname + '?driver=ODBC+Driver+13+for+SQL+Server')
如果您对驱动程序版本感到困惑,您可以使用下面的代码
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)