在javascript中包装长SQL语句的便捷方法

时间:2015-11-11 08:53:25

标签: javascript python mysql node.js string

在python中,可以使用"""包装长MySQL语句。例如,

sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

但是,如果我在javascript中尝试相同的操作,则会出现语法错误。

connection.query("""CREATE TABLE EMPLOYEE (
FIRST_NAME  CHAR(20) NOT NULL,
    LAST_NAME  CHAR(20),
    AGE INT,
    SEX CHAR(1),
    INCOME FLOAT )"""


    , function (err, rows, fields) {
    if (err) throw err;
    res.send(rows);
});

对于python' s """字符串封装,是否存在某种javascript等价物?如果不是,在javascript中封装长MySQL字符串语句的最佳实践是什么?

我正在使用node.js restify client。

5 个答案:

答案 0 :(得分:2)

在JavaScript中处理长字符串:

var sql = "CREATE TABLE EMPLOYEE (" +
             " FIRST_NAME  CHAR(20) NOT NULL," +
             " LAST_NAME  CHAR(20)," +
             " AGE INT," +
             " SEX CHAR(1)," +
             " INCOME FLOAT )";

Python的三重引号很棒!不幸的是,在JavaScript中,您只有两个选择:

  • +基于串联,如上所述
  • \基于@Nina Scholz
  • 提出的延续

就我个人而言,我不喜欢使用\进行换行(使用任何语言)。使用+也不会在字符串中引入不必要的空格。

希望这有帮助。

答案 1 :(得分:1)

您可以在行尾使用反斜杠\将字符串分布在多行上。



var sql = "CREATE TABLE EMPLOYEE ( \
           FIRST_NAME  CHAR(20) NOT NULL, \
           LAST_NAME  CHAR(20), \
           AGE INT, \
           SEX CHAR(1), \
           INCOME FLOAT )";
document.write(sql);




答案 2 :(得分:1)

对于未来的大型SQL声明,一个提示是在MySQL中使用函数或procedures,然后在一行中调用它:

var sql = select * from getEmployee(); // function getEmployee returns the query

答案 3 :(得分:1)

如果您使用支持ES6的node.js,这应该不是问题。 ES6 javascript现在支持使用以下语法的多行字符串。

sql = `CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )`

答案 4 :(得分:1)

对于ES6,@ user781486指出的多行语法确实是可行的方法。

我还想提到我的最爱,即使用字符串数组(即。)来准备多行字符串。

var sql = [
    "CREATE TABLE EMPLOYEE (",
    "    FIRST_NAME  CHAR(20) NOT NULL,",
    "    LAST_NAME   CHAR(20),",
    "    AGE         INT,",
    "    SEX         CHAR(1),",
    "    INCOME      FLOAT )"
].join("\n");

您的里程可能会有所不同。