You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用mysql.connector.connect时遇元组相关报错求解决

解决mysql.connector连接报错:'tuple' object has no attribute 'strip'

问题分析

执行数据库连接代码时触发('tuple' object has no attribute 'strip',)错误,排查后发现两个核心问题:

  • 异常处理逻辑错误:直接将元组类型的e.args与字符串拼接,触发类型错误
  • 连接参数存在隐性风险:未显式传入端口参数,且部分属性未做空白字符清理

修复后的代码

import logging
from mysql.connector import Error
import mysql.connector

class Database:
    def __init__(
        self,
        host="localhost",
        database="bayer",
        username="root",
        password="root",
        port="3306",
    ) -> None:
        # 确保参数为合法字符串并清理空白字符
        self.host = str(host).strip()
        self.database = str(database).strip()
        self.username = str(username).strip()
        self.password = str(password).strip()
        self.port = str(port).strip()
        self.connection = None
    
    def connectDatabase(self):
        # 避免重复初始化日志配置
        if not logging.getLogger().hasHandlers():
            logging.basicConfig(level=logging.INFO)
            
        if self.connection is not None:
            logging.info("返回已激活的连接")
            return self.connection
                   
        try:
            # 显式传入所有必要连接参数
            self.connection = mysql.connector.connect(
                host=self.host, 
                database=self.database, 
                user=self.username, 
                password=self.password,
                port=self.port
            )
            
            logging.info("CON02")
            
            if self.connection.is_connected():
                logging.info(f"已连接到数据库: {self.database}")
                return self.connection
            else:
                logging.error(f"连接数据库失败: {self.database}")
        except Error as e:
            # 修复字符串拼接错误,正确输出异常信息
            logging.info(f"数据库错误: {e.args}")
            raise e

    def query(self, connection, sql, *args):
        cursor = connection.cursor()
        try:
            cursor.execute(sql, args)
            return cursor
        except Error as e:
            logging.error(f"数据库错误: {e.args}")
            raise e

关键修复点

  • 异常处理修复:使用f-string格式化输出异常信息,避免元组与字符串直接拼接的类型错误
  • 参数校验增强:对所有连接属性调用strip()去除首尾空格,避免因空白字符导致的连接失败
  • 显式传入端口:在connect()方法中添加port=self.port参数,确保连接参数完整
  • 日志配置优化:避免重复初始化日志处理器,防止日志输出异常

内容的提问来源于stack exchange,提问作者Douglas Chiodi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:54:57