如何从Postgres映射或命名SQL表到Node?

7
我们正在从.NET转换为Node和PostgreSQL以进行新项目。 由于Postgres最佳实践似乎不依赖于大写字母,所以我们使用下划线来分隔单词而不是使用MSSQL和Linq中的PascalCase来命名DB列。
最佳实践是: 1. 在查询中将所有列映射为camelCase吗?(繁琐 - 这就是我们现在正在做的事情,使用多行像“member_id as memberID”或“obj.memberID = dbObj.member_id”之类的代码。) 2. 自动将代码中的camelCase变量与下划线分隔的SQL列进行映射? 3. 接受Postgres命名约定,使从DB查询返回的对象在我的代码中具有下划线分隔? (似乎不理想 - 然后我们会有非DB对象使用camel case,而DB对象使用下划线分隔...很凌乱。)
希望能够使用SQL查询而不是ORM,但到目前为止这是个难点。
3个回答

10
我们决定使用Knex,它会自动引用所有列名,因此不会出现大小写问题。在Postgres中,我们使用camelCase和PascalCase进行命名,以使数据库与代码一致。
缺点是当针对Postgres运行原始查询时,我们需要引用列名,但我们可以接受这一点。
编辑:我们现在正在使用Objection的knexSnakeCaseMappers,它会在Postgres中自动处理这个问题- 代码中使用camelCase,在数据库中使用snake_case。非常方便。

2
更新链接:http://vincit.github.io/objection.js/recipes/snake-case-to-camel-case-conversion.html。 另外请注意,您可以在不使用Objection的情况下使用此功能。非常实用的技巧。 - neric

2
你更喜欢支持哪一个?像#1中查询中的映射列现在和将来都需要大量工作;通过humps或类似方式传递源对象和结果对象来自动化它可以减少很多常规工作,但这是另一步,也是另一个可能出错的地方。对#3唯一的反对意见是它有点丑陋。你可以忍受丑陋--关闭任何驼峰命名规则,过一段时间后就不会注意到它了。
如果你非常坚定地想要使用大小写形式,你确实有一些选择;我知道Sequelize支持在适当配置模型时在驼峰命名和蛇形命名之间切换if you configure your models appropriately,而对于一个更低级别的方法,还有一个旧的driver plugin。然而,我建议你只是习惯它。

谢谢@dmfay - 你所说的“getting used to it”是指什么?也就是说,“标准”的情况可能是什么 - 在整个过程中都使用snake_case吗? - Freewalker
我的意思是,习惯在你的JavaScript代码中看到使用蛇形命名法的列名。 - dmfay

2
我相信这涵盖了您的所有要点:pg-promise和列名大小写敏感性
最容易的解决方案是对于所有列名均使用下划线语法,然后自动将其转换为驼峰命名,正如示例中所示。

真的很想使用SQL查询而不是ORM,但到目前为止这是一个难点。

这正是pg-promise所提供的。更棒的是,您可以在外部SQL文件中很好地组织所有SQL,详情请参阅Query Filespg-promise-demo
另请参见 - 事件receive

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接