首页 > 解决方案 > 使用 sqlalchemy 引擎访问 mysql 数据库时出错

问题描述

我已经在 mysql 中创建了一个数据库,我正在尝试使用 sqlalchemy 通过 python 访问它。请看下面:

import mysql
from  mysql import connector
from sqlalchemy import create_engine
from sqlalchemy.engine import base
from mysql.connector.connection import MySQLConnectionAbstract
from mysql.connector.connection import MySQLConnection
from mysql.connector.cursor import MySQLCursor

def return_connection_string(database_name, database_user, database_password, database_host, database_port):
    try:
        connection_string = 'mysql+mysqlconnector://' + database_user + ':' + database_password + '@' + database_host + ':' + database_port + '/' + database_name
        print(connection_string)
        return connection_string
    except Exception as e:
        print('Encountered error while generating connection string for MySQL!')
        print(e)

t=return_connection_string('earningsdb','root','MyNewPass','127.0.0.1','3306')

engine = create_engine(t)

print(engine.table_names())

一切正常,除了最后一条语句,它会引发以下错误

engine.table_names() Traceback(最近一次调用最后一次):

文件“”,第 1 行,在 engine.table_names()

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py”,第 2136 行,在 table_names 中,self._optional_conn_ctx_manager(connection) 为 conn:

文件“C:\Users\user\Anaconda3\lib\contextlib.py”,第 81 行, 输入 return next(self.gen)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py”,第 1932 行,在 _optional_conn_ctx_manager 中,self.contextual_connect() 作为 conn:

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py”,第 2123 行,在 contextual_connect self._wrap_pool_connect(self.pool.connect, None) 中,

_wrap_pool_connect 中的文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\base.py”,第 2158 行,返回 fn()

文件“C:\Users\userAnaconda3\lib\site-packages\sqlalchemy\pool.py”,第 403 行,连接返回 _ConnectionFairy._checkout(self)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 788 行,在 _checkout 仙女 = _ConnectionRecord.checkout(pool)

结帐中的文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 532 行,rec = pool._do_get()

_do_get self._dec_overflow() 中的文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 1193 行

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\util\langhelpers.py”,第 66 行,退出 compat.reraise(exc_type, exc_value, exc_tb)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\util\compat.py”,第 187 行,在 reraise raise value

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 1190 行,在 _do_get return self._create_connection()

_create_connection 中的文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 350 行,返回 _ConnectionRecord(self)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 477 行,在init self.__connect(first_connect_check=True)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\pool.py”,第 671 行,在 __connect connection = pool._invoke_creator(self)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\strategies.py”,第 106 行,连接返回 dialect.connect(*cargs, **cparams)

文件“C:\Users\user\Anaconda3\lib\site-packages\sqlalchemy\engine\default.py”,第 410 行,在连接中返回 self.dbapi.connect(*cargs, **cparams)

文件“C:\Users\user\Anaconda3\lib\site-packages\mysql\connector__init__.py”,第 173 行,在连接中返回 MySQLConnection(*args, **kwargs)

文件“C:\Users\user\Anaconda3\lib\site-packages\mysql\connector\connection.py”,第 62 行,在init super(MySQLConnection, self) 中。初始化(*args, **kwargs)

TypeError: super(type, obj): obj 必须是类型的实例或子类型

我查看了其他有类似错误的帖子,但无法弄清楚要解决这个问题到底要做什么。

谢谢

标签: pythonmysqlclassinheritancesqlalchemy

解决方案


推荐阅读