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

使用Python将带参数的HANA SQL转为JSON时遇语法错误求助

问题解决:HANA hdbcli带参数查询语法错误

问题原因

HANA数据库的hdbcli模块不使用%s作为参数占位符,你当前SQL语句里的%s会被HANA当成普通SQL字符解析,从而触发'%'附近语法不正确的报错。hdbcli遵循JDBC/ODBC参数绑定规范,使用**问号?**作为位置占位符。

解决方案

将SQL查询中的%s替换为?,保持参数传递逻辑不变即可。

修改后的代码

def db(db_name="xxx"):
    return dbapi.connect(address=db_name, port="xx", user="xx", password="123")

def query_db(query, args=(), one=False):
    cur = db().cursor()
    cur.execute(query, args)
    r = [dict((cur.description[i][0], value) for i, value in enumerate(row)) for row in cur.fetchall()]
    cur.connection.close()
    return (r[0] if r else None) if one else r

def test(request):
    # 将%s替换为?作为占位符
    my_query = query_db("select bname, name_text from addrs where num=?", (100,))
    return JsonResponse(my_query, safe=False)

urlpatterns = [
    path('s4d/', test),
]

补充说明

如果需要使用命名参数,hdbcli也支持:参数名的格式,示例如下:

my_query = query_db("select bname, name_text from addrs where num=:num", {"num": 100})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:45:32