具有Typeerror但Pyodbc有效的sqlalchemy

问题描述 投票:0回答:1

我尝试了多种方法来通过sql alchemy连接到MSSQL,但始终会收到以下错误:

Traceback (most recent call last):
  File "<ipython-input-100-71745b407575>", line 1, in <module>
    conn = engine.connect()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 2473, in connect
    return self._connection_cls(self, **kwargs)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 878, in __init__
    self.__connection = connection or engine.raw_connection()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 2559, in raw_connection
    return self.pool.unique_connection()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\pool.py", line 184, in unique_connection
    return _ConnectionFairy(self).checkout()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\pool.py", line 401, in __init__
    rec = self._connection_record = pool._do_get()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\pool.py", line 746, in _do_get
    con = self._create_connection()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\pool.py", line 189, in _create_connection
    return _ConnectionRecord(self)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\pool.py", line 287, in __init__
    exec_once(self.connection, self)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\event.py", line 377, in exec_once
    self(*args, **kw)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\event.py", line 386, in __call__
    fn(*args, **kw)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\strategies.py", line 168, in first_connect
    dialect.initialize(c)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\connectors\pyodbc.py", line 135, in initialize
    super(PyODBCConnector, self).initialize(connection)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\dialects\mssql\base.py", line 1164, in initialize
    super(MSDialect, self).initialize(connection)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\default.py", line 177, in initialize
    self._get_default_schema_name(connection)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\dialects\mssql\base.py", line 1180, in _get_default_schema_name
    user_name = connection.scalar("SELECT user_name() as user_name;")
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1383, in scalar
    return self.execute(object, *multiparams, **params).scalar()
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1449, in execute
    params)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1628, in _execute_text
    statement, parameters
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1691, in _execute_context
    context)
  File "C:\Users\wantai1\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\default.py", line 333, in do_execute
    cursor.execute(statement, parameters)
TypeError: The first argument to execute must be a string or unicode query.

这是我的代码

import sqlalchemy as sa
import pyodbc
engine =sa.create_engine('mssql+pyodbc://uid:pwd@AWS1DNA01/xxx_Database,driver = SQL+Server')
conn = engine.connect()

此外,我尝试按照文档中的建议传递参数,并得到相同的错误。

conn_string = urllib.parse.quote_plus("Driver={SQL Server}; Server=AWS1DNA01; Database=xxx_Database; Integrated Security=False;UID=uid;PWD=pwd")
engine = sa.create_engine('mssql+pyodbc:///?odbc_connect={}'.format(conn_string))
conn = engine.connect()

此错误是什么意思,我该如何解决?另外,我尝试使用pyodbc进行连接,并且可以正常工作:

conn_string = "Driver={SQL Server}; Server=AWS1DNA01; Database=xxx_Database; Integrated Security=False;UID=uid;PWD=pwd"
connection = pyodbc.connect(conn_string)

有人可以帮忙吗?

python sqlalchemy pyodbc
1个回答
0
投票
我终于解决了这个问题,尽管我仍然不知道原始问题的原因。我没有使用pyodbc,而是使用pymssql创建了引擎,它可以正常工作。

engine = sa.create_engine('mssql+pymssql://uid:pdw@server/db?')

© www.soinside.com 2019 - 2024. All rights reserved.