简体   繁体   English

sqlalchemy无法连接到ms sql服务器

[英]sqlalchemy fails to connect to ms sql server

Trying to connect to SQL server using SQLAlchemy with pyodbc (freeTDS) as the driver; 尝试使用带有pyodbc (freeTDS)作为驱动程序的SQLAlchemy连接到SQL Server; The connections succeeds if I use pyodbc directly: 如果我直接使用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()

But when I use SQLAlchemy, it fails with a mysterious error: 但是当我使用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)
... 

Here is the full stack trace: 这是完整的堆栈跟踪:

Traceback (most recent call last): File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1122, in _do_get return self._pool.get(wait, self._timeout) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/queue.py", line 145, in get raise Empty sqlalchemy.util.queue.Empty 追溯(最近一次通话):文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,行1122,在_do_get中返回self._pool.get(等待,self._timeout)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/queue.py”,行145,在开始时清空sqlalchemy.util.queue .Empty

During handling of the above exception, another exception occurred: 在处理上述异常期间,发生了另一个异常:

Traceback (most recent call last): File "", line 1, in File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 2091, in connect return self._connection_cls(self, **kwargs) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 90, in init if connection is not None else engine.raw_connection() File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 2177, in raw_connection self.pool.unique_connection, _connection) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py", line 2147, in _wrap_pool_connect return fn() File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 328, in unique_connection return _ConnectionFairy._checkout(self) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/sit 追溯(最近一次通话最近):文件“”,第1行,文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”,第2091行在连接中返回self._connection_cls(self,** kwargs)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”,第90行,在如果连接不是,则初始化init ,其他engine.raw_connection()文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”,行2177,在raw_connection自我中.pool.unique_connection,_connection)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/base.py”,第2147行,在_wrap_pool_connect中,返回fn()文件“ /users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py“,第328行,在unique_connection返回_ConnectionFairy._checkout(self)文件” / Users / purecarscomputer / anaconda / envs /tensorflow/lib/python3.5/sit e-packages/sqlalchemy/pool.py", line 766, in _checkout fairy = _ConnectionRecord.checkout(pool) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 516, in checkout rec = pool._do_get() File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1138, in _do_get self._dec_overflow() File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 66, in exit compat.reraise(exc_type, exc_value, exc_tb) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/compat.py", line 187, in reraise raise value File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 1135, in _do_get return self._create_connection() File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 333, in _create_conne e-packages / sqlalchemy / pool.py”,行766,在_checkout fairy = _ConnectionRecord.checkout(pool)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool中“ .py”,行516,在结帐中rec = pool._do_get()文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,行1138,在_do_get self._dec_overflow()文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py”,第66行,位于出口 compat.reraise(exc_type,exc_value ,exc_tb)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/compat.py”,行187,提高价值文件“ / Users / purecarscomputer / anaconda /envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py“,行1135,在_do_get返回self._create_connection()文件” / Users / purecarscomputer / anaconda / envs / tensorflow / lib / python3。 5 / site-packages / sqlalchemy / pool.py“,行333,在_create_conne中 ction return _ConnectionRecord(self) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 461, in init self. 返回_ConnectionRecord(self)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,位于init self中。 connect(first_connect_check=True) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py", line 661, in __connect exec_once(self.connection, self) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/event/attr.py", line 246, in exec_once self(*args, **kw) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/event/attr.py", line 256, in __call fn(*args, **kw) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/langhelpers.py", line 1331, in go return once_fn(*arg, **kw) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/strategies.py", line 181, in first_connect dialect.initialize(c) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/connectors/pyodbc.py", line 165, in initialize super(PyODBCConnector, self).initialize(co connect(first_connect_check = True)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,第661行,位于__connect exec_once(self.connection,self)文件中“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/event/attr.py”,行246,位于exec_once self(* args,** kw)文件“ / Users / purecarscomputer / anaconda / envs / tensorflow / lib / python3.5 / site-packages / sqlalchemy / event / attr.py“,第256行,位于__call fn(* args,** kw)文件“ / Users / purecarscomputer / anaconda / envs / tensorflow / lib / python3.5 / site-packages / sqlalchemy / util / langhelpers.py“,行1331,返回go_on_fn(* arg,** kw)文件“ / Users / purecarscomputer / anaconda / envs / tensorflow /lib/python3.5/site-packages/sqlalchemy/engine/strategies.py”,第181行,位于first_connect Dialect.initialize(c)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/ site-packages / sqlalchemy / connectors / pyodbc.py“,行165,在初始化super(PyODBCConnector,self).initialize(co nnection) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/mssql/base.py", line 1742, in initialize super(MSDialect, self).initialize(connection) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/default.py", line 256, in initialize self.get_isolation_level(connection.connection) File "/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/mssql/base.py", line 1735, in get_isolation_level "tried views: %s; nnection)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/mssql/base.py”,行1742,在初始化super(MSDialect,self).initialize(连接),在初始化self.get_isolation_level(connection.connection)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/default.py”的第256行中用户/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/mssql/base.py“,行1735,在get_isolation_level“尝试的视图:%s; final error was: %s" % (views, err)) UnboundLocalError: local variable 'err' referenced before assignment 最终错误是:%s“%(视图,错误))UnboundLocalError:分配前引用了局部变量'err'

I've tried install and uninstall sqlalchemy and searched around on google, but not find a solution. 我试过安装和卸载sqlalchemy,并在google上进行了搜索,但没有找到解决方案。 Does anyone have similar problems and have a clue about what is happening? 是否有人有类似的问题,并且对正在发生的事情有一个线索?

OS information: 操作系统信息:

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

Here's the connection string I used to solve a connection problem with similar symptoms: 这是我用来解决具有类似症状的连接问题的连接字符串:

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)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM