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

Python操作Cassandra传参执行Delete查询报CQL语法错误如何解决?

错误原因
  • Cassandra CQL的参数绑定仅支持值类参数的转义,不支持绑定列名、表名这类标识符。将列名通过参数字典传递时,驱动会自动为列名添加单引号转为字符串格式,最终生成的CQL语句会变成delete 'book_info' from books where book_id=?的非法形式,和报错信息中“期望FROM关键字但遇到字符串”的提示完全匹配。
  • 代码存在额外隐患:你已将输入的id转为整数idnum,但实际传参时仍使用了字符串类型的原始输入id,后续可能触发类型不匹配错误。
修复方案

列名不能通过参数绑定传递,需要先做白名单校验(防止注入风险)后直接拼接进CQL语句,过滤条件的id值继续使用参数绑定即可,修复后的代码参考:

if user_input == "b":
    id = input("Enter id of your book")  
    idnum = int(id)
    column_name = input("Enter column name")
    # 配置白名单校验列名合法性,替换为你的books表实际存在的列名
    valid_columns = {"book_info", "book_name", "price", "store_count"}
    if column_name not in valid_columns:
        print("输入的列名不存在")
        exit()
    # 列名直接拼接,加反引号适配含特殊字符的列名场景
    delete_cql = f"DELETE `{column_name}` FROM books WHERE book_id = %s"
    # 传参使用转换后的整数idnum
    session.execute(delete_cql, (idnum,))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:03