使用pymysql出现AttributeError: 'NoneType' object has no attribute 'encoding'错误求助
解决pymysql中的AttributeError: 'NoneType' object has no attribute 'encoding'错误
这个错误本质上是因为你的数据库连接对象(conn)或者游标(cursor)变成了None,导致后续操作调用属性时失败。结合你的代码来看,最可能的问题和解决方法如下:
1. 修正charset参数的写法
你在pymysql.connect里写的是charset="utf-8",但MySQL的字符集标识是utf8(没有横杠),pymysql严格遵循MySQL的命名规范,使用utf-8会导致连接初始化失败,最终conn成为None。
把这行改成:
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456',db='home', charset="utf8")
2. 给连接和操作加完整的异常捕获
你的代码只捕获了插入阶段的异常,但连接、创建表阶段的错误没被处理,很容易出现None对象的情况。建议把整个数据库操作流程都包裹在try-except里,同时加上资源释放的finally块。
3. 修正表字段的拼写错误
你创建表时写的catagory是拼写错误,正确的应该是category,虽然这不是当前错误的直接原因,但后续插入数据时会因为字段名不匹配报错,顺便修正掉。
修正后的完整代码
import pymysql try: # 修正charset为utf8,确保连接正常初始化 conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', passwd='123456', db='home', charset="utf8" ) cursor = conn.cursor() # 修正字段名拼写,同时加if not exists避免重复建表报错 cursor.execute("""create table if not exists job_list( job varchar(30), people varchar(30), category varchar(30), place varchar(30), publish varchar(30) ) """) # 插入数据时使用修正后的字段名 cursor.execute("""INSERT INTO job_list(job,people,category,place,publish) VALUES (%s, %s, %s, %s, %s)""", ["算法工程师", "2018毕业生", "研发", "雅加达", "2018-03-28"]) conn.commit() print("数据插入成功!") except pymysql.Error as e: # 异常时回滚事务 if 'conn' in locals() and conn: conn.rollback() print(f"数据库操作出错:{str(e)}") finally: # 确保关闭游标和连接,释放资源 if 'cursor' in locals() and cursor: cursor.close() if 'conn' in locals() and conn: conn.close()
额外说明
如果修改后还是出现类似错误,可以检查以下几点:
- 确认MySQL服务是否正常运行
- 检查
home数据库是否存在 - 验证用户名和密码是否正确
内容的提问来源于stack exchange,提问作者llric
相关产品推荐
相关产品推荐

