提问者:小点点

sqlalchemy无法连接到ms sql server


尝试使用以pyodbc(freeTDS)作为驱动程序的SQLAlchemy连接到SQL server;如果直接使用pyodbc,则连接成功:

>>> import pyodbc
>>> conn = pyodbc.connect('DSN=serverdsn;UID=user;PWD=password')
>>> crsr = conn.cursor()
>>> rows = crsr.execute("select @@VERSION").fetchall()
>>> print(rows)
[('Microsoft Azure SQL Data Warehouse - 10.0.9248.28 Sep 12 2017 01:08:55 Copyright (c) Microsoft Corporation', )]
>>> crsr.close()
>>> conn.close()

但当我使用SQLAlchemy时,它失败了,出现了一个神秘的错误:

>>> from sqlalchemy import create_engine
>>> e = create_engine("mssql+pyodbc://user:password@serverdsn")
>>> with e.connect() as con:
...     rs = con.execute('select * from users')
...     for row in rs:
...         print(row)
... 

下面是完整的堆栈跟踪:

回溯(最近一次调用):文件“/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,第1122行,在_do_get中返回self._pool.get(wait,self._timeout)文件“/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/queue.py”,第145行,在get中升起

在处理上述异常时,又发生了一个异常:

回溯(最近一次调用):文件“”,第1行,在文件“/users/pureCarsComputer/Anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”中,第2091行,在connect中返回self._connection_cls(self,**kwargs)文件“/users/pureCarsComputer/Anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”,第90e-packages/sqlalchemy/pool.py“,第766行,in_checkout faire=_connectionRecord.checkout(pool)文件”/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py“,第516行,incheckout rec=pool._do_get()文件”ction return_connectionRecord(self)文件“/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,第461行,在init self.connect(First_connect_check=true)文件“/users/purecarscomputer/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,第661行,在__connect exec_once(rscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/connectors/pyodbc.py“,第165行,在initialize super(ms方言,self)中初始化(connection)文件”/users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/msql/base.py“,第1742行,在initialize(ms方言)中初始化(connection最后的错误是:%s“%(视图,err))UnboundLocalError:在赋值之前引用了局部变量”err

我试过安装和卸载sqlalchemy并在google上搜索,但没有找到解决方案。有没有人有类似的问题,对正在发生的事情有头绪?

操作系统信息:

ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29

共1个答案

匿名用户

下面是我用来解决具有类似症状的连接问题的连接字符串:

import urllib
from sqlalchemy import create_engine

# utilize existing odbc connection to create engine
params = urllib.quote_plus("DRIVER={}; SERVER=server; Database=database; UID=user; PWD=pw")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

参考http://docs.sqlalchemy.org/en/latest/dialcts/mssql.html#pass-through-exact-pyodbc-string