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

Python将方位值存入PHPMyAdmin时触发TypeError错误求助

嘿,我一眼就揪出问题所在了!

为什么会触发这个TypeError?

你写的这段代码犯了一个pymysql使用里的典型错误:

record_x1y1 = """Insert Into directions_store(id, cardinal_directions) Values(%(cardinal_directions)s)""", { 'cardinal_directions': direction_x1y1 }
cursor.execute(record_x1y1)

你把SQL语句字符串和参数字典打包成了一个元组,直接扔给了cursor.execute()方法。但pymysql的execute()要求第一个参数是纯SQL字符串,第二个参数才是可选的参数集合(字典或序列),它根本不接受把两者合并成的元组当参数。当内部逻辑尝试把这个元组当成SQL去处理时,就会触发字节拼接失败的错误,也就是你看到的can't concat tuple to bytes。

另外还要提醒你:你的SQL语句里声明了要插入id和cardinal_directions两个字段,但值列表里只给了cardinal_directions的值。如果directions_store表的id不是自增主键的话,这还会触发字段数量不匹配的错误,建议先确认id字段的属性——如果是自增的,插入时完全可以省略id字段,避免额外问题。

修正后的正确代码

把SQL语句和参数分开传给execute()就搞定了,给你两种场景的示例:

场景1:id是自增主键(推荐)

# 只插入cardinal_directions字段,id由数据库自动生成
sql = """INSERT INTO directions_store(cardinal_directions) VALUES(%(cardinal_directions)s)"""
params = { 'cardinal_directions': direction_x1y1 }

# 分开传参!
cursor.execute(sql, params)
# 务必提交事务,不然数据不会写入数据库
conn.commit()

场景2:需要手动指定id值

sql = """INSERT INTO directions_store(id, cardinal_directions) VALUES(%(id)s, %(cardinal_directions)s)"""
params = { 
    'id': 1,  # 替换成你的实际id值
    'cardinal_directions': direction_x1y1 
}

cursor.execute(sql, params)
conn.commit()

额外小贴士

  • 执行增删改操作后,一定要调用conn.commit()提交事务,这是新手很容易忘的点,没提交的话数据只会停留在内存里,不会真正写入数据库。
  • 确认cardinal_directions字段的数据类型和你传入的direction_x1y1类型匹配,比如字段是VARCHAR的话,要确保传入的是字符串类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:42:47