Lire dans une BDD distante depuis mon PI
Modérateurs : Francois, maxty01
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Lire dans une BDD distante depuis mon PI
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
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
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
Re: Lire dans une BDD distante depuis mon PI
Que veux tu dire par "parser" ?
Comment fait on pour passer plusieurs variables ?
A+
Comment fait on pour passer plusieurs variables ?
A+
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Lire dans une BDD distante depuis mon PI
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 ). 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: Résultat dans le navigateur 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
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 …).
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 ). 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: Résultat dans le navigateur 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
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).
Re: Lire dans une BDD distante depuis mon PI
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
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
Re: Lire dans une BDD distante depuis mon PI
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
print ("camera" + str(Commande_IO['Camera']))
Dans le PI:
Dans Echange.php:
Qu'en penses tu ?
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
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']))
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);
?>
-
- Messages : 58
- Enregistré le : sam. 25 nov. 2017 20:40
Re: Lire dans une BDD distante depuis mon PI
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 !
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 !
Re: Lire dans une BDD distante depuis mon PI
C'est ce que je fais dans "Echange.php"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...
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
-
- Messages : 58
- Enregistré le : sam. 25 nov. 2017 20:40
Re: Lire dans une BDD distante depuis mon PI
Si tu le fais dans Echange.php, je ne vois ni host, ni login, ni password pour la BDD.
Re: Lire dans une BDD distante depuis mon PI
Je fais appel à Connect qui comprend l'acces ....Barbedouce a écrit :Si tu le fais dans Echange.php, je ne vois ni host, ni login, ni password pour la BDD.
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
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: Lire dans une BDD distante depuis mon PI
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
Tiens, cadeau
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
Visiblement tu n'as pas tout compris non plus toiBarbedouce 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...
Tiens, cadeau
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).