繁体   English   中英

sqlalchemy无法连接到ms sql服务器

[英]sqlalchemy fails to connect to 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(等待,self._timeout)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/util/queue.py”,行145,在开始时清空sqlalchemy.util.queue .Empty

在处理上述异常期间,发生了另一个异常:

追溯(最近一次通话最近):文件“”,第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”,行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中 返回_ConnectionRecord(self)文件“ /Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/pool.py”,位于init self中。 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)文件“ /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; 最终错误是:%s“%(视图,错误))UnboundLocalError:分配前引用了局部变量'err'

我试过安装和卸载sqlalchemy,并在google上进行了搜索,但没有找到解决方案。 是否有人有类似的问题,并且对正在发生的事情有一个线索?

操作系统信息:

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

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

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/dialects/mssql.html#pass-through-exact-pyodbc-string

暂无
暂无

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

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