복붙노트

[SQL] 쉘 변수로 MySQL의 쿼리 결과를 저장

SQL

쉘 변수로 MySQL의 쿼리 결과를 저장

나는 데이터베이스에서 검색 홀드 결과에 변수가 필요합니다. 지금까지 내가 성공하지 노력하고있어 기본적입니다.

myvariable=$(mysql database -u $user -p $password | SELECT A, B, C FROM table_a)

bash는 명령의 나의 이해는 당신이 볼 수있는 매우 좋지 않다.

해결법

  1. ==============================

    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. ==============================

    2.더 직접적인 방법은 다음과 같습니다

    더 직접적인 방법은 다음과 같습니다

    myvar=$(mysql mydatabase -u $user -p$password -se "SELECT a, b, c FROM table_a")
    
  3. ==============================

    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. ==============================

    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. ==============================

    5.당신은 bash는 사용 단일 값을 사용하려면 :

    당신은 bash는 사용 단일 값을 사용하려면 :

      companyid=$(mysql --user=$Username --password=$Password --database=$Database -s --execute="select CompanyID from mytable limit 1;"|cut -f1)
    
      echo "$companyid"
    
  6. ==============================

    6.

    myvariable=$(mysql database -u $user -p$password | SELECT A, B, C FROM table_a)
    

    -p 후 빈 공간없이. 그 사소한,하지만 일을하지 않고.

  7. ==============================

    7.당신은 특정 데이터베이스 이름과 쿼리가 다음 실행 쿼리 아래의 사항을 지켜 될하고자하는 호스트가있는 경우 :

    당신은 특정 데이터베이스 이름과 쿼리가 다음 실행 쿼리 아래의 사항을 지켜 될하고자하는 호스트가있는 경우 :

    outputofquery=$(mysql -u"$dbusername" -p"$dbpassword" -h"$dbhostname" -e "SELECT A, B, C FROM table_a;" $dbname)
    

    그래서 당신은 리눅스에서 MySQL의 클라이언트를 설치해야합니다 MySQL의 쿼리를 실행합니다

  8. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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 존.

  12. from https://stackoverflow.com/questions/1636977/store-mysql-query-output-into-a-shell-variable by cc-by-sa and MIT license