2017-03-06 1 views
0

Je suis ssh'd dans un serveur distant, et là j'ai créé des fichiers python comme un test: un pour créer une base de données, et un pour lire les données de celui-ci.sqlite3 cursor.fetchall() renvoie un tableau vide

Le script qui crée la base de données

import os 
import sqlite3 

# set up database 
conn = sqlite3.connect('Materials.db') 
c = conn.cursor() 

def createTable(): 
     c.execute("DROP TABLE IF EXISTS images") 
     c.execute("CREATE TABLE images(ID TEXT, url TEXT)") 
createTable() 

path = os.getcwd() 

imagepath = "/home/rootadmin/1080_images" 
imagedir = os.listdir(imagepath) 
for image in range(0,len(imagedir)): 
     c.execute('INSERT INTO images(ID, url) VALUES(?,?)',(imagedir[image],'www.google.com')) 
     print(imagedir[image]) 

Voici les commandes d'impression les données qui sont nécessaires, par exemple il pique les identifiants des images.

Dans mon script pour lire les données de la db:

import sqlite3 

conn = sqlite3.connect('Materials.db') 
c = conn.cursor() 

c.execute('SELECT ID FROM images') 
objectId = c.fetchall() 
print(objectId) 

J'ai une connaissance limitée de sqlite3, mais je me attends à la commande d'impression dans le second script pour imprimer l'ID a trouvé dans le tableau d'images , à partir du Materials.db, mais il renvoie un tableau vide.

+1

vos boucles 'for' pourraient également être améliorées btw. faire 'pour item dans imagedir:' et dans la boucle utiliser la nouvelle variable 'item' au lieu de' imagedir [image] ' –

Répondre

2

Vous devez engager votre transaction lors de l'insertion:

for image in range(0,len(imagedir)): 
    c.execute('INSERT INTO images(ID, url) VALUES(?,?)',(imagedir[image],'www.google.com')) 
    print(imagedir[image]) 
conn.commit() 

ou use the connection as a context manager à validation automatique lorsque le contexte sort:

with conn: 
    for image in range(0,len(imagedir)): 
     c.execute('INSERT INTO images(ID, url) VALUES(?,?)',(imagedir[image],'www.google.com')) 
     print(imagedir[image]) 

Cela garantit également que la transaction est annulée explicitement en arrière s'il était une exception.

+0

Cela fonctionne, merci. Pourriez-vous élaborer sur l'utilisation de la connexion en tant que gestionnaire de contexte? –

+1

@MitchellvanZuylen: J'ai lié à la section de documentation pertinente. –

+1

@MitchellvanZuylen: pour plus de détails sur les gestionnaires de contextes, voir la [documentation de référence] (https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers). –