使用SQLAlchemy连接Docker中MySQL服务器时出现DatabaseError
Docker部署的MySQL无法通过SQLAlchemy连接
我通过Docker部署了本地MySQL服务器,使用mysql/mysqlserver镜像,端口映射为3306。尝试用SQLAlchemy库连接该服务器进行Python操作数据库,但访问engine对象时返回数据库错误。
创建engine的代码:
def mysql_engine_generator(): return create_engine("mysql+mysqlconnector://root:XXXXX@localhost:3306/mysql", echo=True) engine = mysql_engine_generator()
执行的SQL语句:
with engine.connect() as conn: conn.execute(text("CREATE TABLE some_table (x int, y int)"))
得到的错误信息:
DatabaseError: (mysql.connector.errors.DatabaseError) 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (111)
查看错误背景说明后,得知问题可能出在方言或数据库驱动而非SQLAlchemy本身,但我用的是MySQL官方文档推荐的驱动与方言组合,不清楚问题所在。
排查尝试:
- 使用MySQL CLI执行
CREATE TABLE some_table (x int, y int)可以正常创建表,说明SQL语句和数据库本身无问题 - 更换驱动为mysqldb,出现操作错误:
OperationalError: (MySQLdb.OperationalError) (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
- 更换驱动为pymysql,出现错误:
OperationalError: (pymysql.err.OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")
内容的提问来源于stack exchange,提问作者Victor Telles
相关产品推荐
相关产品推荐

