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

使用psycopg2+aiogram开发Telegram购物车,数据无法写入korzina列

问题分析与解决

核心错误点

  • SQL语法错误:你用了INSERT...FROM的错误语法,要更新已有用户的购物车数据,应该用UPDATE语句(INSERT是插入新记录,不符合你修改已有用户数据的需求)。
  • 游标使用错误:connection.cursor()是创建游标对象,不能直接把SQL语句传进去,必须通过游标对象的execute()方法执行SQL。
  • 字符串拼接的语法风险:直接用{id_tovara}和{us_id}拼接SQL,不仅存在SQL注入风险,还会因为korzina是text类型,值未加引号导致语法错误。

修正后的代码

# 创建游标对象
cur = connection.cursor()
# 使用UPDATE语句+参数化查询执行更新
cur.execute(
    "UPDATE bot_users SET korzina = %s WHERE user_id = %s",
    (id_tovara, us_id)
)
# 提交事务
connection.commit()
# 关闭游标
cur.close()

补充优化方案

如果需要实现购物车追加商品(而非覆盖原有内容),可以借助PostgreSQL的字符串处理函数,同时兼容空值情况:

cur.execute(
    "UPDATE bot_users SET korzina = COALESCE(korzina || ', ', '') || %s WHERE user_id = %s",
    (id_tovara, us_id)
)

这里COALESCE会处理korzina为空的情况,避免开头出现多余的逗号。

内容的提问来源于stack exchange,提问作者Александр Денисов

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:03:16