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

