使用 Javascript 的模版字符串可以比较方便的写多行的 SQL
const res = await db.query(` SELECT * FROM foo WHERE foo.bar = 'baz' `)
但是遇到 SQL 里面的反引号符号怎么处理呢?
const res = await db.query(` SELECT \`name\`, \`privilege\` FROM \`user\` `)
还是要自己处理转义,一下很不直观了,说到底还是 Javascript 不支持 Raw String,有没有什么比较好的解决方案呢?
Javascript有很多很好用的ORM,但是写SQL?
目前看到的几个比较可行的方法:
![]() | 1 liuhaotian 2018-11-12 21:23:06 +08:00 |
2 Cbdy OP @liuhaotian 无用的答案 |
3 PythonAnswer 2018-11-12 22:14:41 +08:00 ![]() |
4 ltoddy 2018-11-12 22:18:25 +08:00 为什么不用 orm 呢? |
![]() | 5 airyland 2018-11-12 22:25:35 +08:00 sequelize, 特殊情况下才自己拼接。或者 knexjs 之类的工具。 |
![]() | 6 fyibmsd 2018-11-12 22:26:28 +08:00 via iPhone orm |
7 zhouzm 2018-11-12 22:42:17 +08:00 ![]() |
![]() | 8 Sparetire 2018-11-13 02:13:58 +08:00 via Android |
![]() | 9 sutra 2018-11-13 02:30:32 +08:00 SQL 中会有反引号的好像是 MySQL 特有的吧,PostgreSQL 似乎是用双引号的。 |
10 Cbdy OP @PythonAnswer 很有想法,用预处理 |
![]() | 12 jiangzhuo 2018-11-13 05:36:46 +08:00 本来一个模板字符串写 SQL 的事情,SQL builder 就算了,竟然各种 ORM 都出来了。 其实 JS 是支持的 raw string 的,模板字符串就是对标的 Python 中的‘ r ’和 C#中的‘@’,只是 ES 还在完善( ES 提案年年有,一直在更新)。当初为啥选 backquote,是因为 ASCII 里没用被用的字符就那么几个了(我猜大概 MYSQL 也是这么想的) 现在楼主的需求很简单,就是能多行写字符串而已。 第一种方法最简单,改改编译器,把 backquote 换成另外一个不用的字符就行了,但是改完就不符合 ES6 了,也就不能称为 JS 了。 第二种办法,不改编译器,现在 JS 能认的多行字符串还有一种就是 /*和*/之间的字符串,用作注释,也幸亏我们 JS 是解释执行的语言以下方法才能行得通(不过现在 strict mode 不让访问 callee 了)。 https://gist.github.com/jiangzhuo/15b16ebeafdcff7b595641ab8dc7c345 |
14 y7E6IG8spV7TU8n7 2018-11-13 10:40:06 +08:00 |
![]() | 15 356693212 2018-11-13 12:02:43 +08:00 orm |
16 seanhuai 2018-11-13 18:23:25 +08:00 所以为什么要拼接语句呢...大把的 orm |
![]() | 17 e8c47a0d 2018-11-23 11:46:44 +08:00 MongoDB 飘过 |