Python从MySQL批量获取多行数据拼接字符串报错求助
解决MySQL查询结果拼接字符串的错误及换行需求
你遇到的错误str.format() argument after ** must be a mapping, not tuple,根源是Python的MySQL默认游标返回的是元组列表,每个row是元组,而**语法只适用于字典这类映射类型,所以直接用**row会报错。
下面给两种可行的解决方案,同时实现每行单独换行的需求:
方案一:使用字典游标
创建游标时指定返回字典格式,这样fetchall()返回的就是字典列表,就能直接用**row来格式化字符串:
# 初始化连接时指定字典游标(假设mydb是你的数据库连接对象) mycursor = mydb.cursor(dictionary=True) mycursor.execute("SELECT ProductName FROM products;") if mycursor.rowcount == 0: products = "No Products." else: products = "" for row in mycursor.fetchall(): # 每个产品名后加换行符 products += "{ProductName}\n".format(**row) # 可选:移除最后一行多余的换行 products = products.rstrip("\n")
方案二:直接操作元组(更简洁高效)
因为你只查询了ProductName一列,每个元组只有一个元素,直接取索引0即可,还可以用join方法一次性拼接,性能比循环拼接字符串更好:
mycursor.execute("SELECT ProductName FROM products;") if mycursor.rowcount == 0: products = "No Products." else: # 用换行符连接所有产品名,自动实现每行单独换行 products = "\n".join(row[0] for row in mycursor.fetchall())
内容的提问来源于stack exchange,提问作者Nands
相关产品推荐
相关产品推荐

