2011-01-04 19 views
12

Powiel możliwe:
How to export/dump a MySql table into a text file including the field names (aka headers or column names)Zrzut MySQL do plików tekstowych CSV z nazwami kolumn na górze?

Używam tego SQL fragment zrzutu tabeli do plików tekstowych CSV:

SELECT * FROM marki INTO OUTFILE „e:/marki. csv " POLA ZAKOŃCZONE PRZEZ", "ZAMKNIĘTE PRZEZ" " LINIE ZAKOŃCZONE PRZEZ" \ n ";

Jednak to podejście nie dodaje nazw kolumn na początku pliku CSV. Moje pytanie brzmi: jak wybrać wszystkie nazwy kolumn/pól, tak jak robi to phpMyAdmin po wyeksportowaniu tabeli i wybierz "Umieść nazwy pól w pierwszym wierszu".

+0

to sprawdzić (jest to obejście): [Eksportuj plik CSV z MySQL z pozycjami w pierwszym rzędzie] (http://homepage.mac.com/kelleherk/iblog/C711669388/E20060511141025/index.html) –

Odpowiedz

16

Wymyśliłem sposób ręcznego wprowadzania tych nazw pod warunkiem, że używasz MySQL 5 lub nowszego. Tutaj jest napisany jako skrypt bash do jazdy na linii poleceń systemu UNIX:

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 

ile nie najbardziej wdzięczne rozwiązanie, jestem pewien, że to może być skompresowane w jednej linii przez kogoś, kto zna SQL i/albo walnąć trochę lepiej niż mnie ...

Co robi jest:

  1. wykorzystuje MySQL informacji o schemacie, aby utworzyć pusty plik CSV w/nagłówkach kolumn
  2. dołącza dodatkowy przełamane do tego pustego tak CSV Twoje dane zaczną się pojawiać nowa linia
  3. używa dość standardowy „SELECT * INTO OUTFILE ...” zapytanie do tworzenia CSV pełne dane
  4. dołącza plik danych na plik w/nagłówkach kolumn
  5. usuwa dane (tymczasowe) plik

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

8

Myślę, że robi to, co chcesz. Używam mysql 5.1.60, to wypisuje nazwy pól w pierwszym wierszu. To użyje "\ t" jako separatora pól, nie jestem pewien, jak poprosić o przecinek zamiast tego.

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv 
+0

To nie cytuje pól zawierających znak przecinka, więc - w zależności od charakteru danych, oczywiście - potencjalnie wygenerować nieprawidłowy plik CSV. –

+0

@BobbyJack Jeśli separator jest zakładką, nie musisz już martwić się przecinkami ... – rloth

Powiązane problemy