簡體   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