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

