【发布时间】:2021-10-27 13:22:06
【问题描述】:
我混淆了USER、PASS、DB_SERVER 和DB_NAME。前面的变量的值都不包含特殊字符,它们只是字母数字。
我正在连接到 mssql db 的 linux 机器上使用以下内容创建引擎:
抛出IndexError: tuple index out of range:
import sqlalchemy
DRIVER="FreeTDS&PORT=1433&TDS_VERSION=8.0"
sqlalchemy.create_engine(f"mssql+pyodbc://{USER}:{PASS}@{DB_SERVER}/{DB_NAME}?driver={DRIVER}")
然后将引擎传递给 pandas read_sql 调用。
但是,如果我在 Windows 上运行它,那很好:
import sqlalchemy
DRIVER='SQL+Server+Native+Client+11.0'
sqlalchemy.create_engine(f"mssql+pyodbc://{USER}:{PASS}@{DB_SERVER}/{DB_NAME}?driver={DRIVER}")
这是经过混淆的堆栈跟踪:
Traceback (most recent call last):
...
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/pandas/io/sql.py", line 515, in read_sql
chunksize=chunksize,
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/pandas/io/sql.py", line 1295, in read_query
result = self.execute(*args)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/pandas/io/sql.py", line 1162, in execute
*args, **kwargs
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2236, in execute
connection = self._contextual_connect(close_with_result=True)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2304, in _contextual_connect
self._wrap_pool_connect(self.pool.connect, None),
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/engine/base.py", line 2338, in _wrap_pool_connect
return fn()
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 364, in connect
return _ConnectionFairy._checkout(self)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 778, in _checkout
fairy = _ConnectionRecord.checkout(pool)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 495, in checkout
rec = pool._do_get()
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 140, in _do_get
self._dec_overflow()
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 69, in __exit__
exc_value, with_traceback=exc_tb,
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/util/compat.py", line 182, in raise_
raise exception
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/impl.py", line 137, in _do_get
return self._create_connection()
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 309, in _create_connection
return _ConnectionRecord(self)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 440, in __init__
self.__connect(first_connect_check=True)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/pool/base.py", line 666, in __connect
).exec_once_unless_exception(self.connection, self)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/event/attr.py", line 314, in exec_once_unless_exception
self._exec_once_impl(True, *args, **kw)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/event/attr.py", line 285, in _exec_once_impl
self(*args, **kw)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/event/attr.py", line 322, in __call__
fn(*args, **kw)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/util/langhelpers.py", line 1513, in go
return once_fn(*arg, **kw)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/engine/strategies.py", line 199, in first_connect
dialect.initialize(c)
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/dialects/mssql/base.py", line 2444, in initialize
self._setup_version_attributes()
File "{HOME}/.conda/envs/test_env/lib/python3.7/site-packages/sqlalchemy/dialects/mssql/base.py", line 2458, in _setup_version_attributes
if self.server_version_info[0] not in list(range(8, 17)):
IndexError: tuple index out of range
版本:
conda list -f sqlalchemy
# packages in environment at {HOME}/.conda/envs/test_env:
#
# Name Version Build Channel
sqlalchemy 1.3.19 py37h7b6447c_0 anaconda
conda list -f pandas
# packages in environment at {HOME}/.conda/envs/test_env:
#
# Name Version Build Channel
pandas 1.1.3 py37he6710b0_0 anaconda
我希望有某种解决方案让我继续使用sqlalchemy.create_engine,因为多次调用pd.read_sql 和pd.write_sql 需要它
【问题讨论】:
标签: python sql-server sqlalchemy