Lire dans une BDD distante depuis mon PI

Paramétrer le Raspberry Pi B/B+ pour se connecter via Ethernet ou une clé WiFi USB

Modérateurs : Francois, maxty01

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Lire dans une BDD distante depuis mon PI

Message par Bud Spencer » ven. 15 sept. 2017 17:36

Bingo ! t’as tout juste

Suffit ensuite de parser ce que tu reçois pour y placer dans les différentes var de ton programme. C’est en général à ce moment-là que tu commences à comprendre l’intérêt d’utiliser un format comme JSON ou XML :lol:
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: Lire dans une BDD distante depuis mon PI

Message par estelle » ven. 15 sept. 2017 18:19

Que veux tu dire par "parser" ?
Comment fait on pour passer plusieurs variables ?
A+

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Lire dans une BDD distante depuis mon PI

Message par Bud Spencer » sam. 16 sept. 2017 13:37

parser : expression utilisée par les développeurs et que l’on peut traduire par :
analyser/traiter un type (ici une chaine de caractères) pour en extraire des valeurs (et accessoirement les convertir).


Vite fait, un petit exemple complet (moins long a écrire que de tout t'expliquer :lol: ). J’ai créé une table mysql qui contient 3 champs (id (int), camera (varchar) et eclairage (int)) et j’y ai inscrit quelques enregistrements.

Le code php extrait un enregistrement suivant l’ordre définit par le ORDER de la requête sql et retourne le résultat au format JSON (sérialisation).
Code php:
code_php.png
code_php.png (36.55 Kio) Vu 6322 fois
Résultat dans le navigateur
res_html.png
res_html.png (9.36 Kio) Vu 6322 fois
Le code python utilise la lib requests pour récupérer ce résultat via une requete http et en extrait les valeurs en utilisant la lib json (desérialisation) puis les affiche dans la console.
Code et résultat python
code_res_python.png
code_res_python.png (31.69 Kio) Vu 6322 fois

Il faut bien sur ajouter du code pour gérer les éventuelles erreurs (par exemple, la ressource web n’est pas accessible faute de réseau ou si la requête ne retourne aucun enregistrement …).
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: Lire dans une BDD distante depuis mon PI

Message par estelle » sam. 16 sept. 2017 14:19

Oui c'est pas mal
Je dirais même plus c'est très bien

Je vais tester cela car c'est vraiment ce que je veux faire
Encore Merci
T'est un chef :)

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: Lire dans une BDD distante depuis mon PI

Message par estelle » lun. 18 déc. 2017 12:12

Bonjour Bud Spencer,

J'ai testé ta solution mais j'ai une erreur
Une question: "jsn" est une variable ?
Tu dois avoir une erreur lorsque tu lances ton Prg

Image

print ("camera" + str(Commande_IO['Camera']))

Dans le PI:

Code : Tout sélectionner

try:
        r = requests.get("http://ruches.montminoises.free.fr/Echange.php")
        Commande_IO = json.loads(r.text) 
    except:
        print("Requests: probleme de lecture BDD vers serveur")
    
    print ("camera" + str(Commande_IO['Camera']))  
Dans Echange.php:

Code : Tout sélectionner

<?php
include("xxxxxxxxx.php"); 
$link=Connect();
// on sélectionne la base 
mysql_select_db('ruches_montminoises',$link);
// on crée la requête SQL
$sql = "SELECT * FROM Echange";
// on envoie la requête 
$res = mysqli_query($link,$sql) or die (msqli_error($link));
if (mysqli_num_rows($res) == 1)
{
  print json_encode(mysqli_fetch_array($res, MYSQLI_ASSOC),JSON_NUMERIC_CHECK);
}  
// on ferme la connexion 
mysql_close($link);         
?>
Qu'en penses tu ?

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Lire dans une BDD distante depuis mon PI

Message par Barbedouce » lun. 18 déc. 2017 13:43

Il y a plusieurs manières...
Tu aurai pu ne pas utiliser MySQL et faire une BDD en .txt, ça aurait été plus simple coté Pi...

Maintenant que tu as affaire a MySQL, tu peux toujours exécuter du PHP par Python, c'est une solution.

Mais puisque vous utilisez Python pour accéder directement a MySQL sur le serveur Frit, il faut te connecter a la BDD, avec tes identifiants, etc ( les mêmes qu'en PHP...
http://apprendre-python.com/page-databa ... gre-sqlite


Bonne chance ! :)

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: Lire dans une BDD distante depuis mon PI

Message par estelle » lun. 18 déc. 2017 15:01

Barbedouce a écrit :
Mais puisque vous utilisez Python pour accéder directement a MySQL sur le serveur Frit, il faut te connecter a la BDD, avec tes identifiants, etc ( les mêmes qu'en PHP...
C'est ce que je fais dans "Echange.php"

Jusqu'à maintenant j'ai toujours utiliser la méthode POST pour écrire dans les BDD avec succès

Je pense que cela vient de la partie PHP et que "Commande_IO" est vide
Car si je n'initialise pas cette variable j'ai une erreur sur la ligne "Commande_IO = json.loads(r.text)" : "Commande_IO" is not defined

Barbedouce
Messages : 58
Enregistré le : sam. 25 nov. 2017 20:40

Re: Lire dans une BDD distante depuis mon PI

Message par Barbedouce » lun. 18 déc. 2017 18:18

Si tu le fais dans Echange.php, je ne vois ni host, ni login, ni password pour la BDD.

estelle
Raspinaute
Messages : 154
Enregistré le : jeu. 24 déc. 2015 17:14

Re: Lire dans une BDD distante depuis mon PI

Message par estelle » lun. 18 déc. 2017 19:32

Barbedouce a écrit :Si tu le fais dans Echange.php, je ne vois ni host, ni login, ni password pour la BDD.
Je fais appel à Connect qui comprend l'acces ....

J'ai évolué dans le projet
1) un pb acces à la BDD j'ai remplacer les " par des ' dans SQL => plus de pb de BDD
2) erreur sur json.decode()

J' ai abondonné avec json et suis partie sur des "echo" des variables qui me crée une chaîne de 3 caractères au niveau du PI

Au niveau du PI, je fais une extraction de caractère => conversion en int et tout est OK

C'est moins élégant mais cela fonctionne

Bud Spencer
Raspinaute
Messages : 1089
Enregistré le : lun. 15 août 2016 21:38

Re: Lire dans une BDD distante depuis mon PI

Message par Bud Spencer » sam. 23 déc. 2017 11:23

Non Estelle, il n’y a pas d'erreur dans mon code et il est parfaitement fonctionnel (les sceenshoot en attestent). Par contre, il est évident que le tiens ne peut pas fonctionner. Le plus drôle, c’est qu’avec tous les ‘experts’ en ‘python-php-mysql ’ qu’il y a ici, aucun ne t’a notifié tes erreurs de code alors qu’elles se voient comme un nez de clown lumineux au milieu de la figure … Relis ton code et réfléchis 5 minutes, tu vas forcement comprendre pourquoi cela ne marche pas.

C’est un peu décourageant de voir que tu fais marche arrière en te rabattant sur des solutions aussi nulle alors que depuis pas mal de temps je t’ai toujours donné toutes les infos (code a l’appuis) pour que tu puisse développer un vrai web-services en utilisant les langages que tu as choisi.
Il faut bien comprendre que les exemples de code que je donne ne sont pas des solutions qu’il suffit de recopier. Ils sont faits pour démontrer des méthodes le plus simplement possible et pour pouvoir être compris. Décortiques chaque instruction du code que j’ai mis et s’il y en a une que tu ne comprends pas, documente toi dessus ou demande avant de dire que cela ne marche pas.

Pour répondre à ta question, non, 'jsn' n’est pas à proprement parler une variable. C’est une structure (un ensemble de variable). Ici il représente l’enregistrement extrait de la db converti en objet JSON. Si tu avais cherché à comprendre le code d’exemple avant de vouloir l’utiliser, tu le saurais ;)

Barbedouce a écrit :Il y a plusieurs manières...
Tu aurai pu ne pas utiliser MySQL et faire une BDD en .txt, ça aurait été plus simple coté Pi...
Maintenant que tu as affaire a MySQL, tu peux toujours exécuter du PHP par Python, c'est une solution.
Mais puisque vous utilisez Python pour accéder directement a MySQL sur le serveur Frit, il faut te connecter a la BDD, avec tes identifiants, etc ( les mêmes qu'en PHP...
Visiblement tu n'as pas tout compris non plus toi :lol:
Tiens, cadeau ;)
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).

Répondre

Retourner vers « Le réseau sur le Raspberry Pï »