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
相关产品推荐
相关产品推荐

