sqlite3 cursor.fetchall()返回一个空数组

时间:2017-03-06 13:02:40

标签: python sqlite

我正在进入远程服务器,在那里我创建了python文件作为测试:一个用于创建数据库,一个用于从中读取数据。

创建数据库的脚本

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的了解有限,但我希望第二个脚本中的print命令可以从Materials.db中打印在images表中找到的ID,但它会返回一个空数组。

1 个答案:

答案 0 :(得分: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])

这还可以确保在发生异常时显式回滚事务。