Bases de données

a marqué ce sujet comme résolu.

J’ai le sentiment que tu 'butines’ dans différentes directions, sans approfondir suffisamment.

SQL permet de faire des requêtes (SELECT ou INSERT ou UPDATE ou autre) qui peuvent être ultra simples, mais aussi des requêtes ultra sophistiquées. Par exemple, une requête qui va lire des données dans 5 ou 6 ou 10 tables différentes, faire je ne sais quels calculs à partir de ça, et insérer les résultats de tout ça dans une autre table. Essaie de te former sur ça, sérieusement.

En terme de performance, tout est interne à la base de données, c’est plus performant qu’un process qui lirait plein de données, enverrait ces données à un client (Python ou autre), et ce client renverrait des instructions à la BDD.

Quand tu maitrises à peu près bien SQL proprement dit (jointures, jointures externes, group by , etc etc), la suite logique, c’est PL/SQL.

Pareil, on reste sur une technologie qui est interne à la BDD. Tu peux gérer des boucles, des variables, faire plein de choses assez proches que tu peux faire en Python, mais en restant sur une philosophie SQL.

Et ensuite, les fonctions que tu auras créées en PLSQL (fonctions ou plutôt procédures ou packages), tu pourras effectivement les appeler via Python.

Mais pour avancer dans cette direction, j’ai l’impression que SQLLITE, avec ses commandes en mode console, c’est assez rébarbatif.

Bonjour,

Je rencontre actuellement un problème en SQL avec les clefs étrangères.

Je souhaite créer une table Auteurs comportant trois paramètres :

  • id_auteur, une clé primaire attachée à l’auteur
  • prenom, le prénom de l’auteur
  • nom, le nom de l’auteur

Je voudrais pouvoir créer une seconde table livre comportant :

  • id_livre, une clé primaire attachée au livre
  • titre, le titre du livre
  • auteur, une clef étrangère correspondant à id_auteur

Voici le code SQL que j’ai réalisé pour cela :

CREATE TABLE Auteurs(
id_auteur INTEGER PRIMARY KEY,
prenom TEXT,
nom TEXT
);

CREATE TABLE Livres(
id_livre INTEGER PRIMARY KEY,
titre TEXT,
auteur INTEGER,
FOREIGN KEY(auteur) REFERENCES Auteurs(id_auteur)
);

J’utilise le module python sqlite3 de Python ; voici mon code complet :

import sqlite3

connexion = sqlite3.connect("database2.db")
curseur = connexion.cursor()

curseur.execute("PRAGMA foreign_keys = ON;")

curseur.executescript(
'''
DROP TABLE IF EXISTS Auteurs;
DROP TABLE IF EXISTS Livres;

CREATE TABLE Auteurs(
id_auteur INTEGER PRIMARY KEY,
prenom TEXT,
nom TEXT
);

CREATE TABLE Livres(
id_livre INTEGER PRIMARY KEY,
titre TEXT,
auteur INTEGER,
FOREIGN KEY(auteur) REFERENCES Auteurs(id_auteur)
);

''')
data_auteurs = [("Emile","Zola"),\
                ("J.K.","Rowling"),\
                ("Lewis","Caroll"),\
                ("J.R.R","Tolkien"),\
                ("Christopher","Paolini")]
curseur.executemany("INSERT INTO Auteurs(prenom,nom) VALUES (?,?)",data_auteurs)

data_livres = [("Thérèse Raquin",1),\
               ("Harry Potter",2),\
               ("Alice au pays des merveilles",3),\
               ("Bilbo le hobbit",4),\
               ("Eragon",5)]

curseur.executemany("INSERT INTO Livres(titre,auteur) VALUES (?,?)",data_livres)

for auteur in curseur.execute("SELECT * FROM Auteurs"):
    print("Auteur :",auteur)

for livre in curseur.execute("SELECT * FROM Livres"):
    print("Livre :",livre)
    

connexion.commit()
connexion.close()

J’obtiens l’erreur suivante et n’arrive pas à m’en débarrasser :

Traceback (most recent call last):
  File "/Users/christophe_mayeux/Documents/tests sur sqlite3.py", line 8, in <module>
    curseur.executescript(
sqlite3.IntegrityError: FOREIGN KEY constraint failed

Joyeuses fêtes,

@flopy78

On n’est plus sur le sujet original… Il faut créer un autre sujet, par respect pour les gens qui auront le même souci et liront après et pour les personnes qui ont voulu aider sur sur le sujet mais peuvent ne pas avoir d’intérêt pour l’autre sujet.

Comme tu as installé le client local, tu peux bien exécuter directement les requêtes pour voir que l’erreur n’est pas au niveau du code Python et que tu violes effectivement les contraintes d’intégrité dans la suppression des tables… (ligne 10)

+0 -0

Bonjour,

Je m’intéresse depuis peu au SQL et je souhaiterais pouvoir créer des bases de données (un fichier .db), sauf que je ne sais pas du tout comment m’y prendre…

Merci d’avance,

flopy78

Bonjour,

Je suis d’accord avec l’idée de choisir un SGBD (Système de Gestion de Base de Données) en fonction de vos besoins et de vos préférences. Chacun d’entre eux a ses propres outils d’administration et commandes SQL qui vous permettront de créer des bases de données et des tables.

Il est également important de se familiariser avec le langage SQL et les différentes commandes qui vous permettront de manipuler vos données, telles que SELECT, INSERT, UPDATE, DELETE, etc. Il y a de nombreux tutoriels et guides en ligne qui peuvent vous aider à apprendre le SQL et à utiliser ces commandes de base.

Je vous recommande également de consulter la documentation de votre SGBD pour obtenir des informations plus détaillées sur les différentes fonctionnalités et les commandes SQL disponibles.

J’espère que ces informations vous seront utiles

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte