如何在Azure sql_input中使用LIKE SQL命令的参数

0 投票
1 回答
36 浏览
提问于 2025-04-13 15:17

在Azure的V2 Python云函数中,我想把URL中的一个参数用到查询Azure SQL数据库里。但是,当我使用SQL的LIKE时,遇到了一些问题。

我已经成功建立了与数据库的连接,也能在查询中使用URL中的参数,方法是用了一些装饰器:

@app.route("select_name/{name_string}")
@app.sql_input(arg_name="people",
                        command_text="SELECT * FROM dbo.test WHERE name = @Name",
                        command_type="Text",
                        parameters="@Name={name_string}",
                        connection_string_setting="SqlConnectionString")

但是,当我尝试把查询从WHERE改成LIKE并结合使用UPPER时,出现了以下错误:

@app.route("select_name/{name_string}")
@app.sql_input(arg_name="people",
                        command_text="SELECT * FROM dbo.test WHERE UPPER(name) LIKE UPPER('%@Name%')",
                        command_type="Text",
                        parameters="@Name={name_string}",
                        connection_string_setting="SqlConnectionString")

... 错误信息是:

System.Private.CoreLib: 执行函数时出错: Functions.get_people_by_name. Microsoft.Azure.WebJobs.Host: '%@Name%' 无法解析为一个值。

我明白在SQL查询中解析变量时,这种语法似乎不太好用。

我该如何解决这个问题?也许还有其他更灵活的方法可以从云函数查询Azure SQL?你能推荐一些基于Python的解决方案吗?不一定要依赖装饰器。

同时,如果你能推荐一些关于从云函数进行SQL查询和构建API的好资源,我会非常感激。我发现Azure的文档不太好用,希望能找到其他好的资源。

1 个回答

0

你可以使用类似这样的语句:SELECT * FROM dbo.test WHERE UPPER(name) LIKE UPPER('%' + @Name + '%')

。这段话的意思是,从数据库里的“test”表中选择所有的记录,条件是“name”这个字段的内容包含你输入的名字,不管大小写都可以匹配。这里的“UPPER”是把名字变成大写,确保比较的时候不受大小写的影响,而“LIKE”则是用来查找包含特定内容的记录。

撰写回答