[SQL] 쉘 변수로 MySQL의 쿼리 결과를 저장
SQL쉘 변수로 MySQL의 쿼리 결과를 저장
나는 데이터베이스에서 검색 홀드 결과에 변수가 필요합니다. 지금까지 내가 성공하지 노력하고있어 기본적입니다.
myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)
bash는 명령의 나의 이해는 당신이 볼 수있는 매우 좋지 않다.
해결법
-
==============================
1.나는 많은 MySQL의 명령 줄 인터페이스에 대한 모르겠지만, 당신에게 비난 만 도움이 필요 가정, 당신과 같이 명령 주위 중 하나를 교체하려고합니다 :
나는 많은 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")
같은 일의 결과로 반향을 포함하지 않고, (당신이 최근에 충분한 배쉬 버전을 사용하는 가정).
하십시오 -p $ 암호가 오타가 아니라 MySQL이 암호 (옵션과 값 사이에 공백으로) 명령 줄을 통해 입력 할 것으로 기대 방법입니다 있습니다.
참고 MYVARIABLE가하거나하지 않을 수있는 모든 열 머리글 등, ASCII 예술 프레임을 포함하여 표준 출력 (일반적으로 모든하지만 오류 메시지)에 MySQL의 출력은, 당신이 원하는 모든 것이 포함됩니다.
편집하다: 언급 한 바와 같이, MySQL의에 -e 매개 변수가있을 나타납니다, 나는 확실히, 하나 갈 것입니다.
-
==============================
2.더 직접적인 방법은 다음과 같습니다
더 직접적인 방법은 다음과 같습니다
myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
-
==============================
3.당신이 할 수있는 배쉬 배열로 데이터 라인 별을 읽으려면 :
당신이 할 수있는 배쉬 배열로 데이터 라인 별을 읽으려면 :
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)
-
==============================
4.당신은 다른 방법으로 주위 파이프를 가지고 있으며이 같은 쿼리를 에코해야합니다
당신은 다른 방법으로 주위 파이프를 가지고 있으며이 같은 쿼리를 에코해야합니다
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 결과 등을 처리 할 수있는 가장 적합한 언어는 아니다. 당신은 펄, 파이썬이나 PHP에서 매우 간단 할 것이다 일을 얻기 위해 많은 일을해야합니다.
예를 들어, 당신은 어떻게 자신의 변수에 A, B 및 C의 각을받을 수 있습니까? 그것은 확실히 해 드리겠습니다,하지만 파이프를 이해하고 (아주 기본적인 쉘 물건을) 표시하지 않는 경우, 모든 가능한에서 나는 더 적합한 언어를 사용하는 거라고 그렇다면, 당신이 할 수있는 쉬운 작업이 될 수 없습니다.
-
==============================
5.당신은 bash는 사용 단일 값을 사용하려면 :
당신은 bash는 사용 단일 값을 사용하려면 :
companyid=$(mysql --user=$Username --password=$Password --database=$Database -s --execute="select CompanyID from mytable limit 1;"|cut -f1) echo "$companyid"
-
==============================
6.
myvariable=$(mysql database -u $user -p$password | SELECT A, B, C FROM table_a)
-p 후 빈 공간없이. 그 사소한,하지만 일을하지 않고.
-
==============================
7.당신은 특정 데이터베이스 이름과 쿼리가 다음 실행 쿼리 아래의 사항을 지켜 될하고자하는 호스트가있는 경우 :
당신은 특정 데이터베이스 이름과 쿼리가 다음 실행 쿼리 아래의 사항을 지켜 될하고자하는 호스트가있는 경우 :
outputofquery=$(mysql -u"$dbusername" -p"$dbpassword" -h"$dbhostname" -e "SELECT A, B, C FROM table_a;" $dbname)
그래서 당신은 리눅스에서 MySQL의 클라이언트를 설치해야합니다 MySQL의 쿼리를 실행합니다
-
==============================
8.다른 방법 :
다른 방법 :
스크립트 :
#!/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
-
==============================
9.
myvariable=$(mysql -u user -p'password' -s -N <<QUERY_INPUT use databaseName; SELECT fieldName FROM tablename WHERE filedName='fieldValue'; QUERY_INPUT ) echo "myvariable=$myvariable"
-
==============================
10.테이블 이름 또는 데이터베이스는 공간, 또는 지원되지 않는 문자가 포함 된 또 다른 예를 들어 '-'
테이블 이름 또는 데이터베이스는 공간, 또는 지원되지 않는 문자가 포함 된 또 다른 예를 들어 '-'
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;"`
-
==============================
11.내 두 센트 여기 :
내 두 센트 여기 :
myvariable=$(mysql database -u $user -p$password -sse "SELECT A, B, C FROM table_a" 2>&1 \ | grep -v "Using a password")
열 이름과 성가신 (하지만 필요) 암호 경고를 모두 제거합니다. 이 답변에 대한 감사 @Dominic Bartl 존.
from https://stackoverflow.com/questions/1636977/store-mysql-query-output-into-a-shell-variable by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의 대량 INSERT 또는 UPDATE (0) | 2020.05.21 |
---|---|
[SQL] 오라클에서는 뷰를 통해 레코드를 INSERT 또는 UPDATE 할 수 있습니까? (0) | 2020.05.21 |
[SQL] 쿼리 창에서 SQL 서버로 유니 코드 텍스트를 삽입하는 방법 (0) | 2020.05.21 |
[SQL] 안드로이드 SQLite는 쿼리에 LIMIT 인수를 사용하는 방법 (0) | 2020.05.21 |
[SQL] SQL 서버에서 XML 문서의 노드 순서를 찾기 (0) | 2020.05.21 |