gpt4 book ai didi

sql - 使用数据库/sql 包创建通用代码?

转载 作者:数据小太阳 更新时间:2023-10-29 03:17:42 27 4
gpt4 key购买 nike

我最近实现了 a package使用 database/sql 包。通过将 SQL 限制为非常简单的选择/更新/插入语句,我假设该包可以与 database/sql 支持的所有 DBMS 一起工作。

然而,事实证明有些数据库使用?作为占位符值,而其他数据库使用$1$2等,这意味着准备好的语句适用于某些 DBMS,但不适用于其他 DBMS。

所以我想知道是否有任何技术可以使所有受支持的驱动程序以通用方式工作?或者是否有必要在所有地方都使用特定于 DBMS 的代码? (我认为这会使 database/sql 提供的抽象有点毫无意义)。我想使用非准备语句也不是一个选项,因为不同的 DBMS 有不同的方法来转义参数。

有什么建议吗?

最佳答案

我假设这种行为被排除在外是因为 SQL 方言在数据库之间有很大差异,并且 Go 团队希望避免为每个驱动程序编写预处理器以将“GoSQL”转换为 native SQL。 database/sql 包主要提供连接争论,这是一种抽象,属于“非常必要”,而不是语句翻译,后者更“值得拥有”。

也就是说,我同意重写每条语句是一件很麻烦的事情。用正则表达式包装 database/sql/driver.Prepare() 方法以用 native 占位符替换标准占位符应该不会太难,或者提供一个新接口(interface)来指定一个额外的 PrepareGeneric 方法来猜测包装sql.DB 风格,并提供类似的翻译。

Gorp为此使用方言类型,这可能值得一看。

只是抛出想法。

关于sql - 使用数据库/sql 包创建通用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21703524/

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