使用 sqlalchemy.engine.url.URL 为 mssql+pyodbc 建立连接 URL
Building a connection URL for mssql+pyodbc with sqlalchemy.engine.url.URL
问题...
我正在尝试通过 SQLAlchemy 连接到 MSSql 服务器。这是我的伪造凭据代码(显然不是我的真实凭据)。
代码...
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 错误。
(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' 错误????
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)
然后我就可以看到数据框了。
那么,为什么我在尝试连接 SQLAlchemy 时得到 (pyodbc.Error)
?
系统信息
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 documentation 中所述,对于 mssql+pyodbc
个连接
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 连接到 MSSql 服务器。这是我的伪造凭据代码(显然不是我的真实凭据)。
代码...
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 错误。
(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' 错误????
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)
然后我就可以看到数据框了。
那么,为什么我在尝试连接 SQLAlchemy 时得到 (pyodbc.Error)
?
系统信息
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 documentation 中所述,对于 mssql+pyodbc
个连接
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