使用节点mysql检测插入/更新SQL查询的智能方法
我正在使用Node.js和。我需要检测SQL查询是INSERT语句还是UPDATE语句 现在,我正在通过一个测试regexp运行SQL字符串,类似于以下内容(我知道regexp可以更好,这只是为了解释我自己):使用节点mysql检测插入/更新SQL查询的智能方法,mysql,sql,regex,node.js,Mysql,Sql,Regex,Node.js,我正在使用Node.js和。我需要检测SQL查询是INSERT语句还是UPDATE语句 现在,我正在通过一个测试regexp运行SQL字符串,类似于以下内容(我知道regexp可以更好,这只是为了解释我自己): Pool.\u isInsertOrUpdate=函数(sql){ 返回(/^(更新|插入)\s+/i).test(sql); }; 有更聪明的方法吗?这里的问题是,你为什么需要知道这一点?假设有一个合理的原因,您可以用sql传递一个标志。@我知道这听起来很奇怪,但我需要将INSERT
Pool.\u isInsertOrUpdate=函数(sql){
返回(/^(更新|插入)\s+/i).test(sql);
};
有更聪明的方法吗?这里的问题是,你为什么需要知道这一点?假设有一个合理的原因,您可以用sql传递一个标志。@我知道这听起来很奇怪,但我需要将INSERT或UPDATE查询重定向到特定的数据库池(读和写),而不选择一个带有标志的数据库池。类似于Rails Gem的功能。如果您有一个读/写主设备和只读从设备,您可能希望使用一些合适的中间件,而不是使用这种黑客。看了吗?这比粉碎针对MySQL驱动程序的查询要好得多。如果您试图在记录不存在时进行插入,或者在记录存在时进行更新,则使用MySQL即可:@tadman谢谢您的提示。我个人不喜欢ORMs,但我已经研究了一下Sequelize,因为我发现它以一种很好的方式支持读取复制。如果运行原始查询(这是我的情况),请继续执行,然后将查询标记为SELECT。稍后,查询将重定向到读取池。所以基本上和我已经做过的检查差不多,但是可能它更快地检查选择而不是更新/插入。