我需要一个变量来保存从数据库中检索到的结果。到目前为止,这基本上是我正在尝试的,但没有成功。
myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)
我对bash命令的理解并不是很好,你可以看到。
答案 0 :(得分:56)
更直接的方式是:
myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
答案 1 :(得分:42)
我对MySQL命令行界面了解不多,但假设你只需要帮助进行抨击,你应该试着像这样交换命令:
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$password)
将字符串回显到MySQL。或者,您可以更加花哨并使用一些新的bash功能(此处为字符串)
myvariable=$(mysql database -u $user -p$password<<<"SELECT A, B, C FROM table_a")
导致相同的事情(假设您使用的是最新的bash版本),而不涉及回声。
请注意,-p $密码不是拼写错误,而是MySQL期望通过命令行输入密码的方式(选项和值之间没有空格)。
请注意,myvariable将包含MySQL在标准输出时输出的所有内容(通常是除错误消息之外的所有内容),包括任何和所有列标题,ASCII艺术帧等等,这些可能是您想要的,也可能不是。
修改:
正如已经指出的那样,MySQL似乎有一个-e
参数,我肯定会去那个参数。
答案 2 :(得分:15)
要逐行读取数据到Bash数组,您可以这样做:
while read -a row
do
echo "..${row[0]}..${row[1]}..${row[2]}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)
或单个变量:
while read a b c
do
echo "..${a}..${b}..${c}.."
done < <(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p $password)
答案 3 :(得分:12)
你有相反的管道,你需要回显查询,如下所示:
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql db -u $user -p $password)
另一种选择是只使用mysql客户端,比如这个
myvariable=$(mysql db -u $user -p $password -se "SELECT A, B, C FROM table_a")
(-s
是避免ASCII艺术的必要条件)
现在,BASH不是处理此类场景的最合适的语言,尤其是处理字符串和拆分SQL结果等。你需要做很多工作才能在Perl,Python或PHP中获得非常非常简单的东西。
例如,如何在自己的变量上获得A,B和C中的每一个?这肯定是可行的,但是如果你不理解管道和回声(非常基本的shell东西),那么你不会轻松完成任务,所以如果可能的话,我会使用更合适的语言。
答案 4 :(得分:7)
如果要在bash中使用单个值:
companyid=$(mysql --user=$Username --password=$Password --database=$Database -s --execute="select CompanyID from mytable limit 1;"|cut -f1)
echo "$companyid"
答案 5 :(得分:3)
myvariable=$(mysql database -u $user -p$password | SELECT A, B, C FROM table_a)
-p
后没有空格。它琐碎,但没有不起作用。
答案 6 :(得分:1)
如果您有特定的数据库名称和要在其上执行查询的主机,请按照以下查询:
outputofquery=$(mysql -u"$dbusername" -p"$dbpassword" -h"$dbhostname" -e "SELECT A, B, C FROM table_a;" $dbname)
因此要运行mysql查询,需要在linux上安装mysql客户端
答案 7 :(得分:0)
myvariable=$(mysql -u user -p'password' -s -N <<QUERY_INPUT
use databaseName;
SELECT fieldName FROM tablename WHERE filedName='fieldValue';
QUERY_INPUT
)
echo "myvariable=$myvariable"
答案 8 :(得分:0)
Another example when the table name or database contains unsupported characters such as a space, or '-'
db='data-base'
db_d=''
db_d+='`'
db_d+=$db
db_d+='`'
myvariable=`mysql --user=$user --password=$password -e "SELECT A, B, C FROM $db_d.table_a;"`
答案 9 :(得分:0)
其他方式:
您的脚本:
#!/bin/sh
# Set these variables
MyUSER="root" # DB_USERNAME
MyPASS="yourPass" # DB_PASSWORD
MyHOST="yourHost" # DB_HOSTNAME
DB_NAME="dbName"
CONTAINER="containerName" #if use docker
# Get data
data=$($MyHOST -u $MyUSER -p$MyPASS $DB_NAME -h $CONTAINER -e "SELECT data1,data2 from table_name LIMIT 1;" -B --skip-column-names)
# Set data
data1=$(echo $data | awk '{print $1}')
data2=$(echo $data | awk '{print $2}')
# Print data
echo $data1 $data2
答案 10 :(得分:0)
我的两分钱在这里
myvariable=$(mysql database -u $user -p$password -sse "SELECT A, B, C FROM table_a" 2>&1 \
| grep -v "Using a password")
同时删除列名和烦人(但必要)的密码警告。感谢@Dominic Bartl和John为this answer。