Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1354 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Script bash/python extraire données bdd

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script bash/python extraire données bdd

n°2420798
dureiken
Posté le 28-06-2022 à 12:20:47  profilanswer
 

Bonjour
 
j'aurai souhaité savoir si quelqu'un pouvait m'aider à réaliser un script bash/python pour récupérer les 5 dernières valeurs d'une bdd hébergée sur phpmyadmin. Le tout est sur mon Raspberry 3.
 
J'arrive à m'y connecter, injecter des données dans la bdd, mais pas à extraire et envoyer vers un fichier.
 
Merci :)

mood
Publicité
Posté le 28-06-2022 à 12:20:47  profilanswer
 

n°2420838
rat de com​bat
attention rongeur méchant!
Posté le 28-06-2022 à 20:50:24  profilanswer
 

Montre le code que tu utilises pour injecter des données. De mémoire pour en récupérer c'est un truc genre SELECT ... FROM ... ORDER BY ... LIMIT 5 ou quelque chose comme ça.

n°2420845
dureiken
Posté le 28-06-2022 à 21:40:07  profilanswer
 

rat de combat a écrit :

Montre le code que tu utilises pour injecter des données. De mémoire pour en récupérer c'est un truc genre SELECT ... FROM ... ORDER BY ... LIMIT 5 ou quelque chose comme ça.

 

Salut

 

j'ai ceci :

 
Code :
  1. <?php
  2. include 'connect.php';
  3. if(isset($_GET['pH']))
  4. {
  5. $pH=$_GET['pH'];
  6. }
  7. if(isset($_GET['chlore']))
  8. {
  9. $chlore=$_GET['chlore'];
  10. }
  11. if(isset($_GET['flow']))
  12. {
  13. $flow=$_GET['flow'];
  14. $sql  = 'INSERT INTO `ocr2022` (`id`, `date`, `pH` , `chlore`, `flow`) VALUES (NULL, UTC_TIMESTAMP,"'.$pH.'" , "'.$chlore.'", "'.$flow.'" )';
  15. if ($conn->query($sql) === TRUE) {
  16.     echo "Nouvelle entrée OK";
  17. } else {
  18.     echo "Erreur : " . $sql . "<br>" . $conn->error;
  19. }
  20. $conn->close();
  21. ?>
 

Merci


Message édité par dureiken le 28-06-2022 à 21:40:23
n°2420851
rat de com​bat
attention rongeur méchant!
Posté le 28-06-2022 à 22:34:53  profilanswer
 

Ok. Je suppose que les injections SQL c'est pas un soucis car le truc tourne en local uniquement?
 
Pour l'insertion, regarde donc un tuto SQL, car c'est ça le language qu'il faut. Comme je disais ça doit être un SELECT bidule..., mais je n'y connais rien. :o

n°2420855
mechkurt
Posté le 28-06-2022 à 23:04:16  profilanswer
 

$sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';


---------------
D3
n°2420861
dureiken
Posté le 29-06-2022 à 08:04:39  profilanswer
 

mechkurt a écrit :

$sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';


 
Juste :
 

Code :
  1. <?php
  2. include 'connect.php';
  3. $sql  = 'SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5';
  4. if ($conn->query($sql) === TRUE) {
  5.     echo "Nouvelle entrée OK";
  6. } else {
  7.     echo "Erreur : " . $sql . "<br>" . $conn->error;
  8. }
  9. $conn->close();
  10. ?>


 
?
ca me donne erreur : Erreur : SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5
 
Merci de votre aide

n°2420870
mechkurt
Posté le 29-06-2022 à 10:40:50  profilanswer
 

Il t'affiche juste ta variable $sql, apparemment $conn->error est vide.
 
En tout cas le code sql fournis est valide:
http://sqlfiddle.com/#!9/dddfae/1
 
Il doit y'avoir une autre erreur, peut être que ton utilisateur à des droits en écriture seul (c'est un peu bizarre la sécurité en général ce serait plutôt lecture seul ^^).
Tu dit avoir un phpmyadmin (qui n'est pas un moteur de base de donnée mais un affichage web pour la gérer), tu vois tes données, tu peux nous faire un export depuis là ?
Et confirmer le moteur de base de donnée utilisé ?
 
Donne aussi le code du fichier connect.php (tu peux masquer identifiant & mot de passe ^^) pour voir comment est instancier ta connexion à la base de donnée.


---------------
D3
n°2420871
dureiken
Posté le 29-06-2022 à 10:45:21  profilanswer
 

mechkurt a écrit :

Il t'affiche juste ta variable $sql, apparemment $conn->error est vide.
 
En tout cas le code sql fournis est valide:
http://sqlfiddle.com/#!9/dddfae/1
 
Il doit y'avoir une autre erreur, peut être que ton utilisateur à des droits en écriture seul (c'est un peu bizarre la sécurité en général ce serait plutôt lecture seul ^^).
Tu dit avoir un phpmyadmin (qui n'est pas un moteur de base de donnée mais un affichage web pour la gérer), tu vois tes données, tu peux nous faire un export depuis là ?
Et confirmer le moteur de base de donnée utilisé ?
 
Donne aussi le code du fichier connect.php (tu peux masquer identifiant & mot de passe ^^) pour voir comment est instancier ta connexion à la base de donnée.


 

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. // Create connection
  7. $conn = new mysqli($servername, $username, $password, $dbname);
  8. // Check connection
  9. if ($conn->connect_error) {
  10.     die("Connection failed: " . $conn->connect_error);
  11. }
  12. ?>


 
voilou

n°2420872
mechkurt
Posté le 29-06-2022 à 11:13:42  profilanswer
 

Je ne suis pas sur que les erreurs de ton connecteur bdd soient affiché...
 
https://www.php.net/manual/fr/mysql [...] t-mode.php
 
Essaye de modifiant ton code :  

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. /* Activation du rapport d'erreur */
  7. $driver = new mysqli_driver();
  8. $driver->report_mode = MYSQLI_REPORT_ALL;
  9. // Create connection
  10. $conn = new mysqli($servername, $username, $password, $dbname);
  11. // Check connection
  12. if ($conn->connect_error) {
  13. die("Connection failed: " . $conn->connect_error);
  14. }
  15. try {
  16.     /* si la connexion échoue, une mysqli_sql_exception sera lancé */
  17.     $conn = new mysqli($servername, $username, $password, $dbname);
  18. } catch (mysqli_sql_exception $e) {
  19.     die($e->__toString());
  20. }
  21. ?>


et pour ton script récupérant les résultats :

Code :
  1. try {
  2. $result = $mysqli->query(" SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5 " );
  3. foreach ($result as $row) {
  4.  echo " id = " . $row['id'] . "<br>\n";
  5. }
  6. } catch (mysqli_sql_exception $e) {
  7.     die($e->__toString());
  8. }


---------------
D3
n°2420881
dureiken
Posté le 29-06-2022 à 12:42:09  profilanswer
 

alors j'ai mis ton script
 
si je change le MDP dans connect.php, ca n'affiche rien quand je vais sur la page pour tester ce qu'il se passe
 
si je mets le bon MDP mes anciens script marchent bien
 
pour le script recuperant les resultats, ca n'affiche rien
 

mood
Publicité
Posté le 29-06-2022 à 12:42:09  profilanswer
 

n°2420893
rat de com​bat
attention rongeur méchant!
Posté le 29-06-2022 à 15:59:32  profilanswer
 

rajoute donc un printf("toto" ) (enfin le truc qui va bien en PHP :o ) pour voir si le script tourne ou pas du tout. Voir plusieurs printf().

n°2420905
mechkurt
Posté le 29-06-2022 à 18:51:08  profilanswer
 

Regardes aussi tes logs php, y'a forcement un problème...
 
Si tu changes le mot de passe, la connexion devrait échouer et donc le die avec le message d'erreur être affiché.
Tu est en php combien ? apache combien ?
Tu peux faire un script avec juste :

Code :
  1. <?php
  2. phpinfo();
  3. ?>


Ça te donnera plein d'info (genre ou se trouve les logs ^^).


---------------
D3
n°2420907
dureiken
Posté le 29-06-2022 à 18:59:42  profilanswer
 

En error.log j'ai :
[Wed Jun 29 18:59:24.780542 2022] [:error] [pid 8451] [client 192.168.1.10:58016] PHP Fatal error:  Uncaught Error: Call to a member function query() on null in /var/www/html/chlore.php:6\nStack trace:\n#0 {main$
 

n°2420917
mechkurt
Posté le 29-06-2022 à 22:57:14  profilanswer
 

PHP Fatal error:  Uncaught Error: Call to a member function query() on null in /var/www/html/chlore.php:6
Le message est coupé mais l'objet de ta conexion est NULL donc ça ne peut pas fonctionner.
En regardant mon code je voie des conneries, réessaye avec ce code pour connect.php :

Code :
  1. <?php
  2. $servername = "localhost";
  3. $username = "root";
  4. $password = "XXX";
  5. $dbname = "arduino";
  6. /* Activation du rapport d'erreur */
  7. $driver = new mysqli_driver();
  8. $driver->report_mode = MYSQLI_REPORT_ALL;
  9. // Create connection
  10. $conn = new mysqli($servername, $username, $password, $dbname);
  11. try {
  12.     /* si la connexion échoue, une mysqli_sql_exception sera lancé */
  13.     $conn = new mysqli($servername, $username, $password, $dbname);
  14. } catch (mysqli_sql_exception $e) {
  15.     die($e->__toString());
  16. }
  17. ?>


et pour chlore.php :

Code :
  1. <?php
  2. ini_set('display_errors', 1);
  3. ini_set('display_startup_errors', 1);
  4. error_reporting(E_ALL);
  5. require 'connect.php';
  6. try {
  7.     $result = $conn->query(" SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5 " );
  8.     foreach ($result as $row) {
  9.         echo " id = " . $row['id'] . "<br>\n";
  10.     }
  11. } catch (mysqli_sql_exception $e) {
  12.         die($e->__toString());
  13. }
  14. ?>


---------------
D3
n°2420918
dureiken
Posté le 29-06-2022 à 23:06:15  profilanswer
 

alors sur la page web :
 
mysqli_sql_exception: No index used in query/prepared statement SELECT `id`, `date`, `pH` , `chlore`, `flow` FROM `ocr2022` WHERE 1 ORDER BY `id` DESC LIMIT 5 in /var/www/html/chlore.php:8 Stack trace: #0 /var/www/html/chlore.php(8): mysqli->query(' SELECT `id`, `...') #1 {main}
 
et dans error.log : plus rien :)
 
merci de ton aide, c'est quasi bon
 

n°2420923
mechkurt
Posté le 30-06-2022 à 07:53:50  profilanswer
 

Tu peux mettre un index via phpmyadmin ou alors essayer :

Code :
  1. ALTER TABLE `ocr2022` ADD PRIMARY KEY (`id`);


Ce qui est bizarre c'est que tu met NULL dans tes inserts, donc tu est bien en primary autoincrement sur ton id...
 
De toute façon c'est un warning pas truc qui vas faire planter, donc la c'est le catch & die qui empêche l’exécution du script.
 
Remplace  

Code :
  1. $driver->report_mode = MYSQLI_REPORT_ALL;


par

Code :
  1. $driver->report_mode = MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX;


 
Source : https://stackoverflow.com/questions [...] o-index-us
 
Et tu peux aussi modifier les die() dans les catchs par des print ou des echos pour que ça ne termine pas le code...


---------------
D3
n°2420924
dureiken
Posté le 30-06-2022 à 08:34:31  profilanswer
 

Salut

 

ca me donne ça :

 
Code :
  1. id = 1768
  2. id = 1767
  3. id = 1766
  4. id = 1765
  5. id = 1764
 

donc il va bien chercher les id (qui sont déjà en primaire, il y a la petite clé devant, et j'ai créé un index dessus)

 

Et donc ça marche en changeant la requete !! merci :)

 

PS : et tu saurais mettre ça dans un fichier ? que je puisse l'exploiter après ? merci (en gros j'en fais la moyenne et j'execute quelquechose après)


Message édité par dureiken le 30-06-2022 à 08:41:09
n°2420941
mechkurt
Posté le 30-06-2022 à 13:41:33  profilanswer
 

Ben après tu peut faire ce que tu veux (peux :o ) en php, agréger des données dans un tableau, générer un csv, envoyer des données par mail, etc.
C'est un langage coté serveur qui peut faire tout un tas de truc, mais c'est dur de savoir à ta place de quoi tu as besoin...
 
Mais si tu n'ai pas très à l'aise en php/sql (on dirait en tout cas ^^), tu as ptet meilleur temps de récupérer ponctuellement les données via phpmyadmin et faire tes bidules dans excel.


---------------
D3
n°2420942
rat de com​bat
attention rongeur méchant!
Posté le 30-06-2022 à 14:06:00  profilanswer
 

ou passer sur un autre language, notamment le Python qui doit avoir une interface BD/SQL aussi...

n°2420943
dureiken
Posté le 30-06-2022 à 14:22:45  profilanswer
 

bon bah en bash
sudo mysql -u root -p --port=3306 -D arduino -e "SELECT id FROM ocr2022 ORDER BY id DESC LIMIT 5;" >> toto.txt

 

merci :)


Message édité par dureiken le 30-06-2022 à 14:22:56
n°2420944
rat de com​bat
attention rongeur méchant!
Posté le 30-06-2022 à 14:26:32  profilanswer
 

Ah ben tiens, on peut faire du SQL en bash. :lol:  
 
Par contre ce sudo il me paraît pas utile, c'est certainement possible de s'en passer avec la bonne configuration. Après pour un truc qui tourne strictement en local ça passe encore...

n°2420957
mechkurt
Posté le 30-06-2022 à 15:52:22  profilanswer
 

2 jours a debbuger du php pour au final faire un script bash ! ^^
 
Comme quoi faut commencer pas spécifier son besoin et ces compétences avant de se lancer dans un truc...
Ce n'est pas un reproche, je n'avais aucune idée qu'on pouvait le faire en 1 ligne en bash, ou en tout cas dans mon cas j'aurais trouvé ça plus simple de le faire en php  [:airforceone]


---------------
D3
n°2420987
rufo
Pas me confondre avec Lycos!
Posté le 01-07-2022 à 08:11:44  profilanswer
 

Pas besoin d'être root. Tu crées un compte classique via phpmyadmin ou direct en ligne de commande.
Le binaire mysql permet de faire beaucoup de choses en ligne de commande (notamment de l'import/export de fichiers sql).
T'as aussi l'instruction sql SELECT INTO OUTFILE pour sortir un fichier type csv nativement avec mysql :
https://mariadb.com/kb/en/select-into-outfile/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2421026
dureiken
Posté le 01-07-2022 à 15:13:19  profilanswer
 

mechkurt a écrit :

2 jours a debbuger du php pour au final faire un script bash ! ^^

 

Comme quoi faut commencer pas spécifier son besoin et ces compétences avant de se lancer dans un truc...
Ce n'est pas un reproche, je n'avais aucune idée qu'on pouvait le faire en 1 ligne en bash, ou en tout cas dans mon cas j'aurais trouvé ça plus simple de le faire en php  [:airforceone]

 

Desole de t'avoir fait perdre du temps, je pensais faire en php mais c'était une erreur, comme tu as remarqué je ne suis pas un expert, loin de là !

 

si tu n'es pas rancunier : https://forum.hardware.fr/hfr/Progr [...] 8257_1.htm :)


Message édité par dureiken le 01-07-2022 à 15:19:10
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Script bash/python extraire données bdd

 

Sujets relatifs
Transformer script Powershell en batch[Powershell] [RESOLU] Script pour mettre à jour Firefox
Decorators in PythonQuestion analyse/visualisation de données, niveau noob
[PowerShell] Script SFTP avec authentification par clé de fCréation d'un .bat ou script PowerShell pour partage de dossiers.
Script CSV en JSONExclure script du preloader
Raccourci bureau en Pythonerreur requete ldap depuis python
Plus de sujets relatifs à : Script bash/python extraire données bdd


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR