gpt4 book ai didi

mysql - 如何将MySQL风格的问号 `?`绑定(bind)参数转换为Postgres风格的 `$1`绑定(bind)参数

转载 作者:行者123 更新时间:2023-11-29 02:48:40 30 4
gpt4 key购买 nike

我正在将现有项目从 MySQL 转换为 Postgres。代码中有相当多的原始 SQL 文字使用 ? 作为占位符,例如

  SELECT
id
FROM
users
WHERE
name = ?

但是我得到这个错误:

DB query error: error: operator does not exist: character varying = ?

我不想将所有现有 SQL 从 ? 转换为 postgres 风格的运算符,如 $1

是否有某种方法可以让 node-postgres 接受问号,或者可以转换为 postgres 样式参数的实用程序?

请注意,某些基于正则表达式的 hack 是 Not Acceptable ,因为问号可以在引号内,或者反斜杠转义到任何深度。

最佳答案

Is there some way of having node-postgres accept the question marks instead?

没有。并且?$1语法之间没有直接的对应关系,因为后者意味着参数重用,而?不允许。例如,使用 ? ? ? 表示您有 3 个格式化参数,而 $1 $2 $2 表示您有两个格式化参数。

or an utility that can convert to postgres style params?

不太可能,因为没有直接的对应关系,转换只能是单向的,这会使这样的实用程序变得毫无用处。您可以自己替换所有内容,使用单个正则表达式,将每个 ? 替换为 $ + index + 1

I don't want to convert all my existing SQL from ? to postgres-style operators like $1.

在这方面你真的没有太多选择。它必须完成。此外,由于参数重用和可选扩展,$1? 更灵活。例如,pg-promise使用经常需要的各种格式化修饰符很好地扩展了它们:^~:json:csv 等...

Note that some sort of Regex-based hack is not acceptable because question marks can be inside quotes, or backslash escaped to any depth.

与编写用于单向正确转换的实用程序相比,您花在手动转换 SQL 上的时间可能更少。

关于mysql - 如何将MySQL风格的问号 `?`绑定(bind)参数转换为Postgres风格的 `$1`绑定(bind)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38697600/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com