使用Python和SQLite,如何将数据库中的项读入变量?

使用Python和SQLite,如何将数据库中的项读入变量?,python,database,file,sqlite,Python,Database,File,Sqlite,我是一名编程初学者,希望在学习SQLite和Python方面得到一些帮助 目前,我有一个名为“Status.db”的数据库,其中包含两列。这些列是“stamp”,输入INT,和“messages”,连续输入TEXT 我尝试将带有特定戳记ID的消息实例读入变量“output”的代码如下: @cherrypy.expose def comment(self, ID = None): con = lite.connect('static/database/Status.db') wit

我是一名编程初学者,希望在学习SQLite和Python方面得到一些帮助

目前,我有一个名为“Status.db”的数据库,其中包含两列。这些列是“stamp”,输入INT,和“messages”,连续输入TEXT

我尝试将带有特定戳记ID的消息实例读入变量“output”的代码如下:

@cherrypy.expose
def comment(self, ID = None):
    con = lite.connect('static/database/Status.db')
    with con:    
        cur = con.cursor()    
        cur.execute("SELECT messages FROM Status WHERE stamp is ?", (ID,))
        temp = cur.fetchone()
        output = temp[0]
但是,当我执行此代码时,会收到一条错误消息,内容如下:

Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/cherrypy/_cprequest.py", line 606, in respond
    cherrypy.response.body = self.handler()
  File "/usr/lib/pymodules/python2.7/cherrypy/_cpdispatch.py", line 25, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "proj1base.py", line 176, in comment
    output = temp[0]
TypeError: 'NoneType' object is not subscriptable
我想知道是否有人能向我澄清这个错误的含义,以及我能做些什么来让它工作

提前谢谢

编辑: 下面是创建并写入数据库的代码

 @cherrypy.expose
    def writeStatus(self, newStatus=None, post=None):
        """Update the status file with the most recent status update
           by inserting a timestamp and new status into a database
        """

        con = lite.connect('static/database/Status.db')
        stamp = time()

        with con:

            cur = con.cursor() 
            cur.execute("CREATE TABLE IF NOT EXISTS Status(stamp INT, messages TEXT)")   
            cur.execute("INSERT INTO Status VALUES(?, ?)", (stamp, newStatus))

这意味着
fetchone()
正在返回
None
,这意味着您的SQL查询没有返回任何结果行

这可能是因为您应该在SQL中使用
=
而不是
is

SELECT messages FROM Status WHERE stamp = ?

感谢您为我指出这一点,尽管即使在修复了它之后,我仍然会收到相同的错误消息。@Synia,您的数据库中有任何数据吗?(如果您确实有数据,是否使用数据库中的
ID
调用
comment
)@dbaupp hi,谢谢提醒。我在数据库中进行了检查,发现由于某种原因,分配到数据库中的戳记有6个小数点,而我传递的戳记只有2个小数点。我把它们都改成了整数,现在一切都很好。