davidx1
davidx1

Reputation: 3673

With Python and SQLite, how do i read an item from the database into a variable?

I am a programming beginner, and would like to get a little help with learning SQLite and Python.

Currently, I have a database called "Status.db" which contains two columns. These columns are "stamp", type INT, and "messages", type TEXT, consecutively.

The code I am using to try to read one instance of messages, with a particular stamp, ID, into a variable "output" is as follows:

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

However, when i execute this code, I get an error message that reads:

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

I am wondering if anyone could clarify to me what this error means, and what i could do to make it work.

Thanks in advance!

EDIT: Here is the code that created and writes into the database

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

Upvotes: 0

Views: 825

Answers (1)

Amber
Amber

Reputation: 526703

That means that fetchone() is returning None, which means that your SQL query isn't returning any result rows.

This is probably because you should use = instead of is in your SQL:

SELECT messages FROM Status WHERE stamp = ?

Upvotes: 2

Related Questions