Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrzut MySQL do plików tekstowych CSV z nazwami kolumn na górze?

Wymyśliłem sposób na obejście konieczności ręcznego wprowadzania tych nazw, o ile używasz MySQL 5 lub nowszego. Oto on, napisany jako skrypt bash do uruchomienia w wierszu poleceń uniksa:

DBNAME=<database_name>
TABLE=<table_name>

FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv

#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME

#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME

#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;"

#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME

#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv

Chociaż nie jest to najwspanialsze rozwiązanie, jestem pewien, że może zostać skompresowane do jednej linii przez kogoś, kto zna SQL i/lub trochę lepiej ode mnie bash...

Robi to:

  1. używa schematu informacyjnego MySQL do utworzenia pustego pliku CSV z nagłówkami kolumn
  2. dodaje dodatkowy znak nowej linii do tego pustego pliku CSV, dzięki czemu Twoje dane zaczną pojawiać się w nowej linii
  3. używa dość standardowego zapytania „SELECT * INTO OUTFILE...”, aby utworzyć plik CSV pełen danych
  4. dołącza plik danych do pliku z nagłówkami kolumn
  5. usuwa (tymczasowy) plik danych

Powodzenia, a jeśli posprzątasz, opublikuj wyniki!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pobierasz liczbę z tej samej kolumny w tabeli mysql?

  2. Tabela [nazwa tabeli] nie jest zablokowana

  3. Częste pytania i odpowiedzi dotyczące wywiadu MySQL dla nowszych i doświadczonych

  4. Laravel LewoDołącz gdzie

  5. Obsługa pełnotekstowych znaków specjalnych MySQL