首页 文章

sqlalchemy无法连接到ms sql server

提问于
浏览
1

尝试使用SQLAlchemy以 pyodbc (freeTDS)作为驱动程序连接到SQL服务器;如果我直接使用 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)
...

这是完整的堆栈跟踪:

Traceback(最近一次调用最后一次):文件“/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在处理上述异常期间,发生了另一个异常:Traceback(最近一次调用last):文件“”,第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,则为init.raw_connection()文件”/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy /engine/base.py“,第2177行,在raw_connection self中.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/site-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_connection中返回_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/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 / tensor flow / 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 return once_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行,初始化超级(PyODBCConnector,self).initialize(连接)文件”/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/dialects/ mssql / base.py“,第1742行,初始化超级(MSDialect,self).initialize(连接)文件”/Users/purecarscomputer/anaconda/envs/tensorflow/lib/python3.5/site-packages/sqlalchemy/engine/ default.py“,第256行,初始化self.get_isolation_level(connection.connection)文件”/我们ers / purecarscomputer / anaconda / envs / tensorflow / lib / python3.5 / site-packages / sqlalchemy / dialects / mssql / base.py“,第1735行,在get_isolation_level中”尝试过的视图:%s;最后的错误是:%s“%(views,err))UnboundLocalError:赋值前引用的局部变量'err'

我已经尝试安装和卸载sqlalchemy并在谷歌上搜索,但没有找到解决方案 . 有没有人有类似的问题,并对发生的事情有所了解?

OS信息:

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

1 回答

  • 0

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

    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

相关问题