2017-03-06 112 views
0

我ssh进入一个远程服务器,在那里我创建了python文件作为测试:一个创建一个数据库,一个从它读取数据。sqlite3 cursor.fetchall()返回一个空数组

用于创建数据库

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]) 

在这里,打印命令所要求的数据,例如该脚本它会生成图像的ID。

在我的脚本从数据库中读取数据:

import sqlite3 

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

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

我有sqlite3的知识有限,但我希望在第二个脚本的打印命令打印ID的图像中的表中找到,从Materials.db,但它返回一个空数组。

+1

你'for'循环也可以顺便改进。在'imagedir:'中为项目执行'并在循环中使用新变量'item'而不是'imagedir [image]' –

回答

2

您需要提交您的事务插入时:

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() 

use the connection as a context manager当上下文退出自动提交:

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]) 

这也保证了交易的明确回滚,如果有是个例外。

+0

这可行,谢谢。你能详细说明使用连接作为上下文管理器吗? –

+1

@MitchellvanZuylen:我链接到相关的文档部分。 –

+1

@MitchellvanZuylen:有关上下文管理器的详细信息,请参阅[参考文档](https://docs.python.org/3/reference/datamodel.html#with-statement-context-managers)。 –