【问题标题】:Add multi line string from variable into mysql with bash使用bash将变量中的多行字符串添加到mysql中
【发布时间】:2020-08-15 09:58:19
【问题描述】:

我正在运行一个返回多行文本的 python 脚本,我使用以下截断命令 tr 并希望将其添加到我的数据库中。

我从这里开始:这将删除未格式化的行分隔符。

tr -d '\15\32' < long_text > unixfile.txt

然后我得到一个如下所示的输出:


Happy Birthday Stackoverflow

Happy Birthday to you

Happy Birthday Stackoverflow

我使用以下命令将其放入变量中:

lyrics=$(cat unixfile.txt)
mysql --user=USER --password=PASSWORD --database='DB' --execute='INSERT INTO `song_lyrics` (`id`, `song_id`, `lyrics`, `info`) VALUES ('"'$i'"', '"'$i'"', '"$lyrics"', '0');'
ERROR 1064 (42000) at line 1:

似乎 MySQL 在三个不同的命令中看到了我的整个 3 行字符串(如上所示),因为 unixfile.txt 的输出出现在错误输出中。

【问题讨论】:

  • 可能是您错过了 SQL 的报价吗?比较'"'$i'"''"$lyrics"'

标签: mysql bash ubuntu echo tr


【解决方案1】:

这个问题可以用以下方法解决:

确保在文件中捕获长文本字符串,而不是在变量中 - 然后重新捕获文件/变量。

lyrics=$(cat unixfile.txt)

mysql --user="$user" --password="$password" --database="$my_db" <<END
use my_db;
INSERT INTO song_lyrics (id, song_id, lyrics, info) VALUES ("$i", "$i", "$lyrics", '0');
END

此方法可确保正确传递变量。

唯一剩下的问题是各种标点符号 虽然这篇文章没有描述这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多