sql >> Databáze >  >> RDS >> Mysql

Ukládat MySQL do textových souborů CSV s názvy sloupců nahoře?

Přišel jsem na způsob, jak tato jména zadávat ručně, pokud používáte MySQL 5 nebo vyšší. Tady to je, napsané jako bash skript pro spuštění na unixovém příkazovém řádku:

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

I když to není to nejpůvabnější řešení, jsem si jistý, že jej dokáže zkomprimovat do jednoho řádku někdo, kdo zná SQL a/nebo bash o něco lépe než já...

Co to dělá je:

  1. používá informační schéma MySQL k vytvoření prázdného CSV se záhlavím sloupců
  2. připojí k tomuto prázdnému souboru CSV další nový řádek, takže data se začnou zobrazovat na novém řádku
  3. používá docela standardní dotaz „SELECT * INTO OUTFILE...“ k vytvoření CSV plného dat
  4. připojí datový soubor k souboru se záhlavím sloupců
  5. smaže (dočasný) datový soubor

Hodně štěstí, a pokud to uklidíte, zveřejněte své výsledky!



  1. Nelze se připojit k databázovému serveru (pracovní plocha mysql)

  2. Nelegální instrukce:4 při spuštění Django

  3. SQLDeveloper nezobrazuje žádné tabulky pod připojeními, kde je uvedeno tabulky

  4. PHP:Pokud záznam existuje, zobrazí HTML, jinak nezobrazí nic