En informatique, une requête (en anglais query) est une demande de consultation, effectuée par un programme client à l’attention d’un programme serveur.
La requête peut être une simple référence vers un fichier, ou être l’expression d’une recherche plus spécifique (consultation de certaines fiches d’un fichier, croisement d’information (entre plusieurs fichiers), etc…). Dans ce cas, il est nécessaire d’utiliser un langage de requête (le plus souvent SQL).
Lors d’une consultation de type lecture/recherche, il y a souvent plusieurs réponses qui correspondent à la demande. Le résultat d’une requête prend donc la forme d’un ensemble de réponses. Ces réponses sont éventuellement classées, selon la valeur d’un certain identifiant, ou selon le degré de pertinence.
SELECT * FROM Eleves WHERE NOM = 'Dugenou'
f
:f = open("/chemin/vers/mon_fichier", "r")
* f
est un objet qui implémente un flux de données.
* Un flux de données est structure d'accès :
* On parle d'accès séquentiel aux données
s = f.readline()
* Le système d'exploitation se charge de gérer la mémoire cache :
g = open("/chemin/vers/mon_fichier", "w")
autres possibilités :
"rw"
"a"
g.write(s)
g.close()
g.flush()
import sqlite3 db = sqlite3.connect("/chemin/vers/mabase.db")
db
ouvre une communication (un "socket") avec un programme de gestion de bases de données (ici l'application sqlite3
). c = db.cursor()
c.execute("SELECT * FROM MaTable")
t = c.fetchone()
c.execute("INSERT INTO MaTable VALUES (v1, v2, v3)")
commit
(pour forcer l'écriture)db.commit()
Voir aussi : transparent_persistence.html
Dans le cas du mapping Objet/Relationnel, la couche de persistance gère le chargement en mémoire des données de la base.
Elle joue le même rôle que la mémoire cache:
Les données persistantes sont conservées dans une base de données relationnelle dont le schéma est établi au cours de l'étape de modélisation.
UML
CREATE TABLE Enseignant ( e_mail_ens VARCHAR(30) NOT NULL, nom VARCHAR(30) NOT NULL, prénom VARCHAR(30) NOT NULL, tel VARCHAR(12), PRIMARY KEY (e_mail_ens));
CREATE TABLE UE ( code_UE VARCHAR(30) NOT NULL, intitulé VARCHAR(30) NOT NULL, semestre INTEGER NOT NULL, nb_crédits INTEGER NOT NULL, e_mail_ens VARCHAR(30) NOT NULL, PRIMARY KEY (code_UE), FOREIGN KEY (e_mail_ens) REFERENCES Enseignant);
etc…
Pour chaque Entité une classe distincte.
class Enseignant: def __init__(self, e_mail_ens , nom, prénom, tel): self.e_mail_ens = e_mail_ens self.nom = nom self.prénom = prénom self.tel = tel self.responsabilités = set() self.séances = set() def ajoute_seance(self, séance): self.séances.add(séance) def ajoute_responsabilité(self, UE): self.responsabilités.add(UE)
etc…
Un DAO (Data Access Object) est une classe qui réalise l'interface entre une classe d'objets persistants et la base de données.
class Enseignant_DAO: def __init__(self, db_name): self.db = sqlite3.connect(db_name) def create_enseignant(self, enseignant): ... def get_enseignant_by_id(self, id_enseignant): # Read ... def update_enseignant(self, enseignant): ... def delete_enseignant(self, enseignant): ...
get_enseignant_by_id
effectue les opérations suivantes:Enseignant
:c.execute("SELECT * FROM Enseignant WHERE e_mail_ens = ?", (id_enseignant,))
enseignant
(à l'aide du constructeur de la classe Enseignant
)c.execute("SELECT id_séance FROM Séance WHERE e_mail_ens = ?", (id_enseignant,))
id_séance
trouvé, Séance
avec la méthode get_séance_by_id
de la classe Séance_DAO
séances
avec la méthode ajoute_seance
de l'objet enseignant
UE
:c.execute("SELECT code_UE FROM UE WHERE e_mail_ens = ?", (id_enseignant,))
code_UE
trouvé, UE
avec la méthode get_UE_by_id
de la classe UE_DAO
responsabilités
avec la méthode ajoute_UE
de l'objet enseignant
enseignant
Exemple : relation many-to-many entre Elève et Séance :
get_séance_by_id
fait appel à get_eleve_by_id
pour établir la liste de présenceget_eleve_by_id
fait appel à get_séance_by_id
pour établir la liste des séances auxquelles l'élève a assistéIl faut donc prévoir de ne charger qu'une partie des informations, celle qui est réellement utile au programme (inutile de charger l'emploi du temps de chaque élève lorsqu'on s'intéresse à la liste de présence d'une séance particulière).
Voir aussi : dao-et-orm-sont-ils-compatibles
Le patron de conception "Modèle - Vue - Contrôleur" est destiné à faciliter le développement d'interfaces graphiques.
Une Interface graphique est constituée essentiellement de deux modules :
Pour développer un tel programme, on le divise généralement en trois modules appelés respectivement:
Le modèle est la partie du programme qui manipule et met à jour les informations qui doivent être conservées d'une session à l'autre. Il s'agit de l'ensemble des variables et objets qui sont créés et mis à jour par l'utilisateur lorsqu'il interagit avec le programme.
La Vue est la partie du programme qui gère la mise en page, la disposition des informations, des boutons et des formulaires, l'organisation et la visibilité des différentes fenêtres du programme s'il y en a.
Le contrôleur est la partie du programme qui gère les actions de l'utilisateur. Chacune des actions proposées dans la vue est implémentée dans le contrôleur sous la forme d'une fonction.
Le Web est basé sur trois piliers :
Principe général : consultation/mise à jour à distance d'une base de données.
HTML
et CSS
et Javascript
Spring MVC
)Django
)Node.js
)SQL
dans 90% des casMongoDB
, etc… Un document HTML contient deux parties :
<HEAD>
<BODY>
<head>
. . . </head>
<meta http−equiv="Content−Type" content="text/html; charset=utf−8" />
<title>
. . . </title>
<link rel="stylesheet" href="style.css" type="text/css" />
<body>
. . . </body>
<p>
. . . </p>
<h1>
. . . </h1>
, <h6>
. . . </h6>
<div
>
. . . </div
>
<br />
<hr />
<em>
. . . </em>
, <strong>
. . . </strong>
<span
>
. . . </span
>
<ol><li>
. . . </li>
. . . </ol>
<ul><li>
. . . </li>
. . . </ul>
<dl><dt>
. . . </dt><dd>
. . . </dd>
. . . </dl>
<table>
. . . </table>
. . .
<tr>
. . . </tr>
<th>
. . . </th>
<td>
. . . </td>
<img src="image.png" alt ="texte alternatif " />
<a href="http://www.cnrs.fr/">
. . . </a>
<
baliseid="toto">
. . . </
balise>
<a href="#toto">
. . . </a>
style
class
id
Variables GET
:
http://mon.adresse.com/mon_site.php?nom=Pignon&prenom=Francois A D R E S S E RESSOURCE V A R I A B L E S
Le serveur exécute le script (php, python, java, …), c'est à dire :
Variables POST
(n'apparaissent pas dans l'URL)
<FORM method="post" action="cible.php"> ... </FORM>
les balises INPUT
définissent les variables à transmettre:
<INPUT type="text" name="var1" />
l'INPUT
de type submit
lance la requête : la page cible est chargée et remplace la page courante:
<INPUT type="submit" value="Envoyer" />
<form action = "bonjour.php" method ="post"> Votre nom : <input type="text" name="nom"/> <br/> Votre prénom : <input type="text" name="prenom"/> <br/> <input type="submit" value="Envoyer"> </form>
echo "Bonjour, ".$_POST["prenom"]." ".$_POST["nom"]." !!!";
<form method="post" action="script.php" enctype="multipart/form−data">
</form>
(enctype peut être omis, il vaut alors application/x−www−form−urlencoded).
<fieldset>
. . . </fieldset>
<legend>
. . . </legend>
. . .
<input type="text" name="nom" value="défaut" maxlength="42" />
<input type="password" name="nom" value="défaut" maxlength="42" />
<input type="checkbox" name="nom[]" value="valeur" checked="checked" />
<input type="radio" name="nom" value="valeur" checked="checked" />
<input type="file" name="nom" />
<input type="hidden" name="nom" value="valeur" />
<input type="reset" value="étiquette" />
<input type="submit" value="étiquette" />
<textarea name="nom" cols ="80" rows="5"> . . . </textarea>
<select name="nom">
<option value="valeur1">
. . . </option>
<option value="valeur2" selected="selected">
. . . </option>
</select>
csv
).PHP
Python
+ djangoExemples :
$.ajax({ type: "POST", url: "test.html", success: function(retour){ alert("Données retournées : " + retour ); } });
$("a.test").click(function() { $.ajax({ type: "POST", url: $(this).attr("href"), success: function(retour){ $("#recipient").empty().append(retour); } }); return false; });
$("form.test").submit(function() { s = $(this).serialize(); $.ajax({ type: "POST", data: s, url: $(this).attr("action"), success: function(retour){ $("#recipient").empty().append(retour); } }); return false; });