MySQL 的 sqlalchemy+pyodbc 在尝试从引擎创建连接时给我一个错误

sqlalchemy+pyodbc for MySQL is giving me an error while trying to create a connection from engine

我正在尝试使用 sqlalchemy 和 pyodbc 连接到 MySQL 数据库。使用 ODBC 连接是一项要求,因此我不能使用任何其他方法来创建引擎和连接。 这是我用来创建引擎和连接的代码。

params = quote_plus("DRIVER={MySQL ODBC 8.0 Unicode Driver};"
                                f"SERVER={host}:{port};"
                                f"DATABASE={db};"
                                f"UID={username};"
                                f"PWD={password}")

# Creating dbengine and connection
db_engine = create_engine(f"mysql+pyodbc:///?odbc_connect={params}")
print('Type of dbengine', type(db_engine))
connection = db_engine.connect()

我给出了从 connection = db_engine.connect() 获得的堆栈跟踪的最后 3 行。

  File "C:\ProgramData\Anaconda3\envs\nice_rpa\lib\site-packages\sqlalchemy\engine\base.py", line 1276, in _execute_context
    self.dialect.do_execute(
  File "C:\ProgramData\Anaconda3\envs\nice_rpa\lib\site-packages\sqlalchemy\engine\default.py", line 608, in do_execute
    cursor.execute(statement, parameters)
TypeError: The first argument to execute must be a string or unicode query.

我没有传递任何查询,或者根据 connect() 文档,connect 只需要 1 kwarg 并且没有查询。 我不明白为什么会收到此错误。有人可以解释这个错误的原因和原因吗? 此外,似乎 pyodbc 有时会给出很多错误(根据我阅读的其他资源)。 sqlalchemy+pyodbc 有没有好的替代方案?我最终想将 connection 传递给 pd.to_sql 和 `pd.read_sql' 并且必须使用 odbc。

这是 SQLAlchemy 1 的问题。3.x 和 mysql+pyodbc:// 已在 SQLAlchemy 1.4 中修复。