imn*_*neo 36 mysql sql bash scripting
我需要一个变量来保存从数据库中检索的结果.到目前为止,这基本上是我尝试没有成功的.
myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)
Run Code Online (Sandbox Code Playgroud)
你可以看到我对bash命令的理解不是很好.
enn*_*ler 61
更直接的方法是:
myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
Run Code Online (Sandbox Code Playgroud)
fal*_*tro 44
我不太了解MySQL命令行界面,但假设你只需要帮助进行抨击,你应该尝试交换命令,如下:
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql database -u $user -p$password)
Run Code Online (Sandbox Code Playgroud)
将字符串回显到MySQL.或者,您可以更加花哨并使用一些新的bash功能(此处为字符串)
myvariable=$(mysql database -u $user -p$password<<<"SELECT A, B, C FROM table_a")
Run Code Online (Sandbox Code Playgroud)
导致相同的事情(假设您正在使用最近的足够的bash版本),而不涉及回声.
请注意,-p $密码不是拼写错误,而是MySQL期望通过命令行输入密码的方式(选项和值之间没有空格).
请注意,myvariable将包含MySQL在标准输出上输出的所有内容(通常是除错误消息之外的所有内容),包括任何和所有列标题,ASCII艺术帧等,这些可能是您想要的,也可能不是.
编辑:
正如已经指出的那样,-eMySQL 似乎有一个参数,我肯定会去那个参数.
Pau*_*ce. 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)
Run Code Online (Sandbox Code Playgroud)
或者变成个别变量:
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)
Run Code Online (Sandbox Code Playgroud)
Vin*_*vic 12
你有相反的管道,你需要回显查询,如下所示:
myvariable=$(echo "SELECT A, B, C FROM table_a" | mysql db -u $user -p $password)
Run Code Online (Sandbox Code Playgroud)
另一种方法是只使用mysql客户端,就像这样
myvariable=$(mysql db -u $user -p $password -se "SELECT A, B, C FROM table_a")
Run Code Online (Sandbox Code Playgroud)
(-s需要避免使用ASCII艺术)
现在,BASH不是处理这种类型场景的最合适的语言,尤其是处理字符串和拆分SQL结果等.你需要做很多工作才能在Perl,Python或PHP中获得非常非常简单的东西.
例如,你如何在他们自己的变量上获得A,B和C中的每一个?它肯定是可行的,但是如果你不理解管道和回声(非常基本的shell东西),那么你不会轻易完成任务,所以如果可能的话,我会使用更合适的语言.
小智 8
如果要在bash中使用单个值:
companyid=$(mysql --user=$Username --password=$Password --database=$Database -s --execute="select CompanyID from mytable limit 1;"|cut -f1)
echo "$companyid"
Run Code Online (Sandbox Code Playgroud)
小智 5
另一种方式:
你的脚本:
#!/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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158688 次 |
| 最近记录: |