Je débute dans la gestion des bases de données. J' ai fait un petit programme pour créer une base de donnée contenant 2 tables (description et espèce).
La création de la base et des tables ne pose pas de pb mais l'ajout d'enregistrement me fournit systématiquement le message d'erreur suivant :
Traceback (most recent call last):
File "/Users/francoissauret/Desktop/Fichiers Python/Medocs_Bizarres.py", line 98, in
BaseMedocs.AjouteEnr(Glob.dicoTablesChamps)
File "/Users/francoissauret/Desktop/Fichiers Python/Medocs_Bizarres.py", line 87, in AjouteEnr
cur.execute(req)
sqlite3.OperationalError: no such column: nom d'un champ
Je mouline la dessus depuis des heures et je ne comprends plus rien !!!!!!
je joins les scripts en python:
import sqlite3
import sys
from decrit_bd import *
class GestionBD(object):
"etablissement de la connexion, création du curseur"
def __init__(self):
try:
self.fichierMedocs=Glob.dbChemin
except Exception as err:
print("Erreur de création de la base de données !!!")
else:
self.conn=sqlite3.connect(self.fichierMedocs)
print("Ouais !!!!")
def CreeTables(self,dicTables):
cur=self.conn.cursor()
req="CREATE TABLE "
for clef in dicTables:
req=req+clef+" ("
for desc in dicTables[clef]:
NomChamp=desc[0]
if desc[1]=="k":
TypeChamp="INTEGER PRIMARY KEY, "
elif desc[1]=="i":
TypeChamp="INTEGER, "
elif desc[1]=="r":
TypeChamp="REAL, "
else:
TypeChamp="TEXT, "
req=req+NomChamp+" "+TypeChamp
req=req[:-2]+") "
try:
cur.execute(req) #ici ça marche#
except:
print("Raté!!!")
pass
req="CREATE TABLE "
cur.close()
self.conn.close()
def AjouteEnr(self,dicTables):
liste=[]
rep=[]
req="INSERT INTO "
self.conn=sqlite3.connect(self.fichierMedocs)
cur=self.conn.cursor()
i=0
for clef in dicTables:
print("Fichier : ",clef)
req=req+clef+"("
print(" ")
for desc in dicTables[clef]:
liste.append(desc[0])
i+=1
rep.append(input(desc[2]+" : "))
``` for el in liste:
req=req+el+","
req=req[:-1]+")"
req=req+" VALUES("
for el in rep:
req=req+el+","
req=req[:-1]+")"
print(req)
cur.execute(req) #ici message d'erreur#
req="INSERT INTO "
print("")
BaseMedocs=GestionBD()
BaseMedocs.CreeTables(Glob.dicoTablesChamps)
BaseMedocs.AjouteEnr(Glob.dicoTablesChamps)
script de décrit_db:
class Glob(object):
Classe décrivant la structure de la SGBD Medocs_bizarres
dbChemin="/Users/francoissauret/Desktop/MedocsBizarres/Medocs_bizarres"
#Dictionnaire des tables et des champs#
dicoTablesChamps={"Description":[('idpactif',"k","Clef primaire"),
('Pactif',50,"Nom du principe actif"),('NomDep',50,"Nom déposé"),
('Conc',"r","Concentration"),('Unite',10,"Unité")]
,"Espece":[('idpactif',"i","Clef"),('NomEspece',30,"Espèce"),('Poso',"r","Posologie")
,('UnitPoso',10,"Unité"),('VoieAdmin',20,"Voie administration"),('Rythme',50,"Rythme administration")
]}
# Bonjour
Posté par Marotte ⛧ . Évalué à 6. Dernière modification le 01 juin 2016 à 01:59.
Pour commencer, pour poster ici, il faudrait que tu encadres ton code entre :
et
```
parce que là c’est très chiant à lire…
Tu imprimes ta requête ici :
Quelle tronche elle a ? La visualisation de cette requête ne te permet pas de voir ce qui cloche ?
sqlite3.OperationalError: no such column: nom d'un champ
À priori tu essayes d’insérer une valeur dans un champ nommé : « nom d'un champ »… là comme ça je vois pas… ton code est pas super clair faut dire…
Extrait de https://docs.python.org/3.5/library/sqlite3.html
ça rend le code plus clair en plus.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.