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

Python操作MySQL插入数据报TypeError: 'int' object is not callable

问题根因

这个报错和你的MySQL操作、numpy随机数生成逻辑没有任何关系,属于典型的Jupyter环境变量污染问题:

  • 从报错回溯可以看到,异常触发在n0 = ['Player ' + str(i) for i in range(3)]这行的str(i)调用处。
  • 出现这个错误的唯一原因是:你在同一个Notebook里之前运行的代码,曾经给内置函数名str赋过整数值,比如写过类似str = 234的测试代码,把原本用来做类型转换的内置str()函数覆盖成了int类型的变量。此时再写str(i),Python解释器会找到你之前定义的那个整数变量,尝试把整数当函数调用,自然抛出'int' object is not callable的错误。
  • 你可以做个简单验证:把当前这段代码存成独立的.py文件用Python直接运行,完全不会触发这个报错,就能证明问题出在Notebook留存的历史变量上。

另外你的代码还有个非报错类的小问题:把db.commit()写在for循环里,每插一条数据就提交一次事务,执行效率很低,属于不必要的开销。

修复方案

根据你的需求二选一即可解决报错:

  • 方案1(最彻底):直接重启当前Jupyter Notebook的内核,清空所有历史运行留存的自定义变量,再重新运行代码即可正常执行。
  • 方案2(不想重启内核):在这段代码的最开头加一行del str,手动删掉你之前错误赋值的str变量,解释器会自动找回内置的str函数。

可选优化点:

  • 写INSERT语句的时候建议明确指定要插入的字段名,避免后续表结构调整字段顺序变了导致插错数据,比如把SQL改成INSERT INTO information (username, password) VALUES(%s,%s);
  • 把db.commit()移到for循环外部,等所有插入语句执行完成后统一提交一次事务,提升运行效率。
  • 所有数据库操作完成后记得关闭游标和数据库连接,避免资源泄露。

修复后的完整参考代码:

import mysql.connector 
import numpy as np

# 若选择不重启内核,取消下面这行的注释
# del str

db = mysql.connector.connect(
    host='localhost',
    user='root',
    password='######',
    database='python_database'
)
cursor = db.cursor()

# 明确指定插入字段
syntax = "INSERT INTO information (username, password) VALUES(%s,%s);"

n0 = ['Player ' + str(i) for i in range(3)]
n1 = [p for p in np.random.randint(1, 1000, 3)]

for i in range(3):
    values = (n0[i], int(n1[i]))
    cursor.execute(syntax, values)

# 所有操作完成后统一提交事务
db.commit()

# 关闭资源
cursor.close()
db.close()

写代码时注意不要用str、int、list、range、dict这类Python内置的函数/类名作为自定义变量名,这是新手非常容易踩的坑,会直接覆盖内置逻辑触发各类难以排查的报错。

内容的提问来源于stack exchange,提问作者Pythonic User

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:09:20