我正在使用nodejs 的mysql插件,到目前为止我做的一切都很棒.
但是我遇到了一个绊脚石.我创建了一个导出mysql池的MySQL提供程序:
var mysql = require('mysql');
var mysqlPool = mysql.createPool({
host : '127.0.0.1',
user : 'root',
password : ''
});
mysqlPool.getConnection(function(err, connection) {
connection.query("INSERT INTO ....
Run Code Online (Sandbox Code Playgroud)
我可以选择,创建,插入等都很好,但是我遇到了一个任务,我想在一起运行一个带有大约10个不同命令的小SQL字符串.我考虑过做以下其中一项:
query
并启用multipleStatements
我已经编写了一些代码来执行mysql
作为子进程,但我真的很想避免这样做:
var cp = require("child_process");
var cmdLine = "mysql --user=autobuild --password=something newdb < load.sql";
cp.exec(cmdLine, function(error,stdout,stderr) {
console.log(error,stdout,stderr);
});
Run Code Online (Sandbox Code Playgroud)
选项二的问题是我宁愿不为每个查询启用multipleStatements,只是这个特定的一个.我考虑过创建一个新的连接,但只考虑其他方法可以做到这一点.
TL; DR? 使用NodeJS和MySQL如何在数据库中执行以下操作:
CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20) );
CREATE TABLE sofa (name VARCHAR(20), owner VARCHAR(20) );
CREATE TABLE table (name VARCHAR(20), owner VARCHAR(20) );
Run Code Online (Sandbox Code Playgroud)
非常感谢任何分享他们想法的人
jmi*_*gov 26
您可以使用名为的连接选项multipleStatements
:
// Works with the pool too.
var connection = mysql.createConnection({multipleStatements: true});
Run Code Online (Sandbox Code Playgroud)
然后,您可以传递以下查询:
connection.query('CREATE 1; CREATE 2; SELECT 3;', function(err, results) {
if (err) throw err;
// `results` is an array with one element for every statement in the query:
console.log(results[0]); // [create1]
console.log(results[1]); // [create2]
console.log(results[2]); // [select3]
});
Run Code Online (Sandbox Code Playgroud)
这是一种大.sql
文件友好的方式,可以在不使用multipleStatements
属性和大量缓冲区的情况下以编程方式对 MySQL 执行多个查询。请注意,这不是上传到 mysql 的最有效方式。
var mysql = require('mysql');
var fs = require('fs');
var readline = require('readline');
var myCon = mysql.createConnection({
host: 'localhost',
port: '3306',
database: '',
user: '',
password: ''
});
var rl = readline.createInterface({
input: fs.createReadStream('./myFile.sql'),
terminal: false
});
rl.on('line', function(chunk){
myCon.query(chunk.toString('ascii'), function(err, sets, fields){
if(err) console.log(err);
});
});
rl.on('close', function(){
console.log("finished");
myCon.end();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22343 次 |
最近记录: |