OperationalError: table users has no column named prenom

[Fermé]
Signaler
Messages postés
127
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
19 juin 2020
-
Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
-
Bonjour à tous,
On me dit pas de colonne nommée ''prenom'' ?
Ma table a été créée avec colonne prenom
Merci pour l'aide


import sqlite3

conn = sqlite3.connect('testAdresses')

# Créer la table
# --------------

cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users(
     id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
     nom TEXT,
     prenom TEXT,
     rue TEXT,
     num INTERGER,
     ville TEXT,
     codePostal INTERGER,
     age INTEGER
     
    
)
""")
conn.commit()


# Insérer des données
#--------------------

cursor.execute("""
INSERT INTO users(nom, prenom, rue, num, ville, codePostal, age) VALUES(?, ?, ?, ?, ?, ?, ?)""", ("Dupont", "Jean", "Rue de la Gare", 224, "Tournai", 1700, 79))

testAdresses.close()

#Traceback (most recent call last):
  #File "C:/Users/Utilisateur/AppData/Local/Programs/Python/Python37/testAdresses.py", line 30, in <module>
    #INSERT INTO users(nom, prenom, rue, num, ville, codePostal, age) VALUES(?, ?, ?, ?, ?, ?, ?)""", ("Dupont", "Jeaun", "Rue de la Gare", 224, "Tournai", 1700, 79))
# sqlite3.OperationalError: table users has no column named prenom

8 réponses

Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
124
Bonjour Lecorse

Tu as écrit 2 fois INTERGER au lieu de INTEGER

et testAdresses.close() au lieu de conn.close()
Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
124
Tu peux même tester les erreurs:

import sqlite3
import sys

conn = sqlite3.connect('testAdresses.sq3')

# Créer la table
# --------------

cursor = conn.cursor()
sql_request = """
CREATE TABLE IF NOT EXISTS users(
     id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
     nom TEXT,
     prenom TEXT,
     rue TEXT,
     num INTEGER,
     ville TEXT,
     codePostal INTEGER,
     age INTEGER
)
"""

try:
	cursor.execute(sql_request)
	conn.commit()
except:
	print(sys.exc_info()[1])

# Insérer des données
#--------------------
try:
	cursor.execute("""INSERT INTO users(nom, prenom, rue, num, ville, codePostal, age) VALUES(?, ?, ?, ?, ?, ?, ?)""", ("Dupont", "Jean", "Rue de la Gare", 224, "Tournai", 1700, 79))
except:
	print(sys.exc_info()[1])

conn.close()
Messages postés
127
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
19 juin 2020
18
Bonjour,
Merci pour ta réponse Phil
J'ai modifié mon programme comme tu me l'as suggeré mais j'ai une erreur de syntax que je ne trouve pas
Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
124
Bonjour Lecorse,

C'est quoi l'erreur ?

Recopie ton code ici, tu as repris exactement le mien ?

Car il marche bien chez moi ...
Messages postés
127
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
19 juin 2020
18
<code python>
</code>

import sqlite3
import sys


conn = sqlite3.connect('testAdresses.sq3')

# Créer la table
# --------------

cursor = conn.cursor()
sql_request = """
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
nom TEXT,
prenom TEXT,
rue TEXT,
num INTERGER,
ville TEXT,
codePostal INTEGER,
age INTEGER


)
""")



try:
cursor.execute(sql_request)
conn.commit()
except:
print(sys.exc_info()[1])


# Insérer des données
#--------------------

try:
cursor.execute("""INSERT INTO users(nom, prenom, rue, num, ville, codePostal, age) VALUES(?, ?, ?, ?, ?, ?, ?)""", ("Dupont", "Jean", "Rue de la Gare", 224, "Tournai", 1700, 79))
except:
print(sys.exc_info()[1])

conn.close()


Bonjour Phil,

ERROR DE SYNTAX SUR LA VIRGULE APRES LE 4ème ? DE VALUES
Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
124
Bonjour Lecorse,

Ouh la, tu as mal inséré les balises, tu peux le voir toi-même, le code ne se présente pas bien

Mais je l'ai récupéré quand même et testé, ca marche très bien à condition d'enlever la parenthèse fermante à la fin de la définition du 1er sql_request après les 3 guillemets
(qui n'était d'ailleurs pas dans le code que je t'ai donné !)

import sqlite3 
import sys 

conn = sqlite3.connect('testAdresses.sq3') 

# Créer la table 
# -------------- 

cursor = conn.cursor() 
sql_request = """ 
CREATE TABLE IF NOT EXISTS users( 
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE, 
nom TEXT, 
prenom TEXT, 
rue TEXT, 
num INTERGER, 
ville TEXT, 
codePostal INTEGER, 
age INTEGER 
) 
"""

try: 
 cursor.execute(sql_request) 
 conn.commit() 
except: 
 print(sys.exc_info()[1]) 

# Insérer des données 
#-------------------- 

try: 
 cursor.execute("""INSERT INTO users(nom, prenom, rue, num, ville, codePostal, age) VALUES(?, ?, ?, ?, ?, ?, ?)""", ("Dupont", "Jean", "Rue de la Gare", 224, "Tournai", 1700, 79)) 
except: 
 print(sys.exc_info()[1]) 

#Faire une recherche
cursor.execute('select * from users')
for records in cursor:
 print(records[1])

conn.close()

input('entrée')
Messages postés
127
Date d'inscription
samedi 11 mars 2006
Statut
Membre
Dernière intervention
19 juin 2020
18
Phil bonjour,
Merci pour la correction,
Encore une petite question : j'ai fait quelques exercices pour essayer de comprendre la différence entre les chiffres entre {} et [] pas évident quand on a personne devant soit pour expliquer,
Je n'arrive pas trouver le code pour rechercher un ID seul autre que le premier ?
Voir les tentatives
Merci
Bon weekend
Christian

PS : excuses pour le baises mais pas encore bien compris

<code python>


</code>
# test choix de résultats

cursor.execute("""SELECT id,nom,prenom, rue, num ville,codePostal, age FROM users""")
for row in cursor:
#print('{0}: {1}, {2}, {3}, {4}'.format(row[0], row[1], row[2], row[3], row[4]))

# print('{0}: {1}'.format(row[0], row[1]))
#1: Dupont
#2: Renard
#3: Valois

#print('{0}: {1}'.format(row[0], row[1], row[2]))
#1: Dupont
#2: Renard
#3: Valois

#print('{0}: {1}'.format(row[0], row[1], row[3])) (id nom)
#1: Dupont
#2: Renard
#3: Valois

#print('{0}: {1}, {2}'.format(row[0], row[1], row[3])) (id, nom, rue)
#1: Dupont, Rue de la Gare
#2: Renard, Place
#3: Valois, Rue Haute
# ??????3: Valois

# print('{0}: {1}, {2}'.format(row[0], row[1], row[2], row[3])) (id, nom, prenom)
#1:Dupont, Jean
#2:Renard, Jules
#3:Valois, Luc

# print('{0}: {1}, {2}, {3}'.format(row[0], row[1], row[2], row[3])) (ID,nom,prenom,rue)
#1:Dupont, Jean, Rue de la Gare
#2:Renard, Jules, Place
#3:Valois, Luc, Rue Haute

# print('{0} : {1}, {2}, {3}, {4}'.format(row[0], row[1], row[2], row[3], row[4])) (+ num)
#1: Dupont, Jean, Rue de la Gare, 224
#2: Renard, Jules, Place, 22
#3: Valois, Luc, Rue Haute , 122
Messages postés
1181
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
22 septembre 2021
124
Bonjour Lecorse,

Pour les balises, il faut absolument que le code soit à l'intérieur de code python et

/code, donc il y a en premier code python , puis le code, puis /code

Tu dois voir ceci (j'ai enlevé les < et les > pour que ca ne soit pas pris en compte tout de suite, mais normalement il y en a)

code python
cursor.execute('select * from users')
/code

Et quand tu valides ton message, tu dois voir cela:

      cursor.execute('select * from users')


Pour les {} et [], c'est tout simplement le formatage en Python:

print('id = {0} nom = {1}'.format(row[0], row[1]))

'id = {0} nom = {1}' c'est la chaine de caractères avec ce que l'on veut afficher

.format(row[0], row[1]), ce sont les valeurs à afficher

{0} est associé à row[0] et {1} est associé à row[1] , donc on va afficher row[0] en 1er, puis

row[1], ca doit afficher ceci:

id = 1 nom = Dupont

On peut aussi mettre dans les accolades le type de variable associée, par exemple

print('id = {:d} nom = {:s}'.format(row[0], row[1]))

{:d} : id est un integer

{:s} : nom est une string

Tu peux sélectionner sur un id donné:

select * from users where id = 3