2017-04-18 4 views
0

Diese Frage beantwortet 99% von dem, was ich suche ... How do I do a bulk insert in mySQL using node.jsWie verwende ich Ausdruck mit Masseninsert mit npm mysql?

var sql = "INSERT INTO Test (name, email, n) VALUES ?"; 
var values = [ 
    ['demian', '[email protected]', 1], 
    ['john', '[email protected]', 2], 
    ['mark', '[email protected]', 3], 
    ['pete', '[email protected]', 4] 
]; 
conn.query(sql, [values], function(err) { 
    if (err) throw err; 
    conn.end(); 
}); 

Wenn ich will, um einen Ausdruck passieren, wie NOW(), wie würde ich das tun? Wenn ich es im Array übergebe, würde es als String zählen. Da VALUES eine ? ist, die von dem Array aufgefüllt wird, kann ich nicht einfach einen Ausdruck injizieren. Irgendwelche Ideen?

Antwort

0

Grundsätzlich scheint es unmöglich, so sollten Sie eine Abfrage Zeichenfolge, die Sie wollen.

Ich würde dies wie folgt versuchen.

var sql = "INSERT INTO Test (name, email, n, modified_on) VALUES ?"; 
var values = [ 
    ['demian', '[email protected]', 1, '::NOW()'], 
    ['john', '[email protected]', 2, '::UNIX_TIMESTAMP()'], 
    ['mark', '[email protected]', 3, '::DATE()'], 
    ['pete', '[email protected]', 4, '::NOW()'] 
]; 

var formattedQuery = connection.format(sql, [values]).replace(/'::(.*?)'/g, '$1'); 

connection.query(formattedQuery, function(err) { 
}); 

fomattedQuery ist wie folgt.

INSERT INTO Test (name, email, n, modified_on) VALUES ('demian', '[email protected]', 1, NOW()), ('john', '[email protected]', 2, UNIX_TIMESTAMP()), ('mark', '[email protected]', 3, DATE()), ('pete', '[email protected]', 4, NOW()) 

Ich hoffe, das hilft.

+0

Danke! Das scheint mir gut genug zu sein: D –

Verwandte Themen