我正在使用带有node.js的 https://github.com/felixge/node-mysql模块. Mysql表有一个POINT类型的字段.该模块需要发送数组数组以插入批量记录.但它似乎没有指定数据类型的选项. 很自然地,下面的内
Mysql表有一个POINT类型的字段.该模块需要发送数组数组以插入批量记录.但它似乎没有指定数据类型的选项.
很自然地,下面的内容用引号括起来
var loc = "GeomFromText('POINT(" + lat + "," + lon + ")')";
有人试过吗?如何说服查询构建器将其视为sql函数?
或者我是否必须创建自己的查询构建器?
这是 kevinhikaruevans的 pull request.您可以执行类似的操作将对象转换为点:if (typeof val === 'object') { if(val.hasOwnProperty('lat') && val.hasOwnProperty('long')) { return 'POINT(' + [val.lat, val.long].map(parseFloat).join(',') + ')'; } }
假设你有一个只有POINT类型的字段点的表mytable,你可以像这样插入它们:
var points = [ [{ lat: 1, long: 4}], [{ lat: 23, long: -8.345}] ]; var query = connection.query('INSERT INTO mytable(point) VALUES ?', [points], your_callback_func); console.log("Query: " + query.sql);
这将生成类似于的查询:
INSERT INTO mytable(point) VALUES (POINT(1,4)), (POINT(23,-8.345))
这会将具有lat和long字段的任何对象转换为MySQL点.如果这不是预期的行为,您可以创建一个Point类并使用它而不是普通对象,并在lib / protocol / SqlString.js中检查该值是否是Point的实例.