load dati in tabelle MySQL da file txt / csv

Dopo una ricerca sulle fonti, ad esempio:

link-1:

https://dev.mysql.com/doc/refman/8.0/en/creating-tables.html

sappiamo come visto nell’articolo precedente sul blog attuale: https://6viola.it/metodi-di-accesso-ai-data-base-mysql/

metodi di accesso ai data base mysql

  1. come si crea un data base, da command line (cmd), phpMyAdmin
  2. come si crea una o più tabelle, da command line (cmd), phpMyAdmin
  3. come riempire i campi di una tabella, da command line (cmd), phpMyAdmin

Avevamo promesso, nello scorso articolo degli esempi semplici, il caricamento di una tabella da file txt, e da file csv.

Ecco come fare:

§§§

chiamiamo “esercizio1.txt” il file con il seguente contenuto:

Mario,Concetto,zebra,m,2024-03-02,2024-04-04,’\n’

come si vede i “campi” sono separati da una virgola.

“le linee” sono le righe di una matrice righe x colonne,
dove le colonne sono i campi (fields)

il file esercizio1.txt: riempirà una tabella che chiamiamo pet4

creata nel seguente modo:

cmd-1:

INSERT INTO `pet4` (`name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES (‘Maria’, ‘Concetta’, ‘giraffa’, ‘f’, ‘2024-07-01’, ‘2024-07-31’);

Questo è il modo “classico” e cioé esplicito senza avere usato un trasferimento di una riga (lines) nella tabella pet4

eseguiamo prima di ciò -però- è necessaria “la creazione” della tabella pet4.

La assoceremo al data base “mytestdb” nel modo seguente:

cmd-2:

mysql> CREATE TABLE pet4 (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

nella fonte originale era:

CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

vedi:
https://dev.mysql.com/doc/refman/8.0/en/creating-tables.html

poi eseguiamo il cmd -qui sopra- che abbiamo chiamato cmd-1 ..

infine trasferiamo i contenuti con il file testo (esercizio1.txt)

il link seguente:

link-2:

https://dev.mysql.com/doc/refman/8.0/en/loading-tables.html

suggerisce il seguente codice:

mysql> LOAD DATA LOCAL INFILE ‘/path/pet.txt’ INTO TABLE pet LINES TERMINATED BY ‘\r\n’;

Ma vi sono alcuni errori da correggere:

  1. Il /path/ deve indicare dove è il file esercizio1.txt
  2. non si può scrivere:

LOAD DATA LOCAL INFILE ‘C:/Apache24/htdocs/esercizio1.txt‘ INTO TABLE pet4 LINES TERMINATED BY ‘\r\n’;

come sembrerebbe LOGICO dovendo essere i file  eseguibili della cartella htdocs!

ma la linea di comando segnala errore perché considera la cartella non adeguata:

infatti scrivendo:

mysql> SHOW VARIABLES LIKE “secure_file_priv”;

si scopre che vi è una cartella riservata:

C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ 

Alcune fonti consigliano di eliminare questa limitazione andando ad my.ini

ma non è necessario cito per la cronaca:

dove giustamente consiglia di fermare da “servizi” ..

se volessi cancellare l’indirizzo riservato:

“servizi” > “MySQL80” > tasto destro (arresta) > tasto destro (avvia)

ma NON è necessario!

infatti se scriviamo: (avendo trasferito esercizio1.txt nella cartella Uploads prima di quanto segue):

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio1.txt‘ INTO TABLE pet4;

-> FIELDS TERMINATED BY ‘,’
-> LINES TERMINATED BY ‘\n’;

riusciremo a caricare da txt “con 1 solo warning”

se cambiamo in csv “senza warning”:

++
cit on
++

(1)+
il data base è già creato (mytestdb)

(2)+
use mytestdb;

(3)+
creare la tabella pet4:

mysql> CREATE TABLE pet4 (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

(4)+
riempire la tabella pet4:

INSERT INTO `pet4` (`name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES (‘Maria’, ‘Concetta’, ‘giraffa’, ‘f’, ‘2024-07-01’, ‘2024-07-31’);

(4)b+

mysql> SELECT * FROM pet4;

(5)+
riempio la tabella pet4 dal file testo nell’indirizzo riservato

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio1.txt‘ INTO TABLE pet4;

-> FIELDS TERMINATED BY ‘,’
-> LINES TERMINATED BY ‘\n’;

commento:
il contenuto del file esercizio1.txt è il seguente:

Maria,Concetta,antilope,f,2024-03-02,2024-04-04,’\n’

(6)+

riempio la tabella pet4 con csv:

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio2.csv‘ INTO TABLE pet4;

-> FIELDS TERMINATED BY ‘,’
-> LINES TERMINATED BY ‘\n’;

commento:

il contenuto del file esercizio2.csv è il seguente:

Maria,Concetta,giraffa,f,2024-03-02,2024-04-04,’\n’

segue il copia ed incolla della cmd:

++
cit on
++

Enter password: *********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.37 MySQL Community Server – GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> use mytestdb;
Database changed
mysql> CREATE TABLE pet4 (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO `pet4` (`name`, `owner`, `species`, `sex`, `birth`, `death`) VALUES (‘Maria’, ‘Concetta’, ‘giraffa’, ‘f’, ‘2024-07-01’, ‘2024-07-31’);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM pet4;
+——-+———-+———+——+————+————+
| name | owner | species | sex | birth | death |
+——-+———-+———+——+————+————+
| Maria | Concetta | giraffa | f | 2024-07-01 | 2024-07-31 |
+——-+———-+———+——+————+————+
1 row in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio1.txt’ INTO TABLE pet4;
Query OK, 1 row affected, 6 warnings (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 6

mysql> SELECT * FROM pet4;
+———————-+———-+———+——+————+————+
| name | owner | species | sex | birth | death |
+———————-+———-+———+——+————+————+
| Maria | Concetta | giraffa | f | 2024-07-01 | 2024-07-31 |
| Maria,Concetta,antil | NULL | NULL | NULL | NULL | NULL |
+———————-+———-+———+——+————+————+
2 rows in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio2.csv’ INTO TABLE pet4;
Query OK, 1 row affected, 6 warnings (0.00 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 6

mysql> SELECT * FROM pet4;
+———————-+———-+———+——+————+————+
| name | owner | species | sex | birth | death |
+———————-+———-+———+——+————+————+
| Maria | Concetta | giraffa | f | 2024-07-01 | 2024-07-31 |
| Maria,Concetta,antil | NULL | NULL | NULL | NULL | NULL |
| Maria,Concetta,giraf | NULL | NULL | NULL | NULL | NULL |
+———————-+———-+———+——+————+————+
3 rows in set (0.00 sec)

mysql> LOAD DATA LOCAL INFILE ‘C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/esercizio2.csv’ INTO TABLE pet4
-> FIELDS TERMINATED BY ‘,’
-> LINES TERMINATED BY ‘\n’;
Query OK, 1 row affected (0.01 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 0

mysql> SELECT * FROM pet4;
+———————-+———-+———+——+————+————+
| name | owner | species | sex | birth | death |
+———————-+———-+———+——+————+————+
| Maria | Concetta | giraffa | f | 2024-07-01 | 2024-07-31 |
| Maria,Concetta,antil | NULL | NULL | NULL | NULL | NULL |
| Maria,Concetta,giraf | NULL | NULL | NULL | NULL | NULL |
| Maria | Concetta | giraffa | f | 2024-03-02 | 2024-04-04 |
+———————-+———-+———+——+————+————+
4 rows in set (0.00 sec)

mysql>

++
cit off
++

come si vede dal copia ed incolla della linea di comando qui sopra ..

se non si aggiunge:

-> FIELDS TERMINATED BY ‘,’
-> LINES TERMINATED BY ‘\n’;

alla creazione della tabella pet4

non riesce l’incolonnamento in modo corretto!

Nel caso del testo txt (esercizio1.txt)

riesce anche se il testo è esercizio1.txt

ma da 1 warning

mentre non da nessun warning in formato csv.

ALBERO DEI ARTICOLI sul tema INFORMATICA:

  1. apache+php+mysql (146)
    https://6viola.it/apachephpmysql/
  2. phpMyAdmin (studio) (147)
    https://6viola.it/phpmyadmin-studio/
  3. forms e il software php che elabora i forms (studio) (148)
    https://6viola.it/forms-e-il-software-php-che-elabora-i-forms-studio/
  4. metodi di accesso ai data base mysql (149)
    https://6viola.it/metodi-di-accesso-ai-data-base-mysql/
  5. load dati in tabelle MySQL da file txt / csv (150)
    https://6viola.it/load-dati-in-tabelle-mysql-da-file-txt-csv/
  6. Espansione delle basi di “dati da files in MySQL” e “dati in php versus MySQL” (151)
    https://6viola.it/espansione-delle-basi-di-dati-da-files-in-mysql-e-dati-in-php-versus-mysql/

ultimo aggiornamento:

10 luglio 2024, ore 1.32

 

 

 

Questa voce è stata pubblicata in informatica. Contrassegna il permalink.