3 votes

Sqlite3 ne récupère pas les lignes de la base de données bien qu'elles existent.

Mon problème m'a rendu si confus que j'ai décidé de créer un compte et de demander de l'aide :

J'ai créé une base de données appelée gamesapp.db avec une table appelée gamess. Lorsque je la vérifie dans le navigateur db, je peux voir deux lignes que j'ai créées précédemment.

Dans mon programme, je me connecte à la base de données gamesapp, j'exécute select * from gamess et fetchall pour l'imprimer sur HTML, mais le fetchall renvoie une liste vide.

Voici le code :

con = sql.connect('gamesapp.db')
cur = con.cursor()
cur.execute("select * from gamess")

print cur.fetchall()

J'ai aussi essayé de faire

rows = cur.fetchall()
for row in rows:
   print row

sans succès. La fonction fetchall() ne semble fonctionner que lorsque je crée la table dans le programme avec la commande

cur.execute(create table...) 

Cela me semble bizarre, car si je change le "gamess" en quelque chose de différent, Python dit qu'il n'y a pas de telle table, de même si je change le nom de la base de données, il dit qu'elle n'existe pas - je n'arrive pas à comprendre où est le problème.

3voto

Schwern Points 33677

Le fetchall() ne semble fonctionner que lorsque je crée la table dans le programme avec cur.execute(create table...)

C'est parce que vous n'ouvrez pas le fichier de base de données que vous pensez être.

sql.connect('gamesapp.db') est relatif au répertoire où le programme a été lancé. Si votre code est exécuté sur un serveur web, qui sait où il peut se trouver ? Mais vous pouvez être sûr que ce n'est pas le même que lorsque vous testez le code en ligne de commande. (Vous pouvez vérifier avec import os; os.getcwd() )

Pour être sûr, utilisez le chemin d'accès complet au fichier de la base de données et assurez-vous que l'utilisateur sous lequel le serveur Web est exécuté a le droit de lire et d'écrire dans ce fichier.

con = sql.connect('/full/path/to/my/gamesapp.db')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X