С Python и SQLite, как я могу прочитать элемент из базы данных в переменную? - PullRequest
0 голосов
/ 31 марта 2012

Я новичок в программировании и хотел бы получить небольшую помощь в изучении SQLite и Python.

В настоящее время у меня есть база данных "Status.db", которая содержит два столбца.Это столбцы «stamp», тип INT и «messages», тип TEXT, последовательно.

Код, который я использую, чтобы попытаться прочитать один экземпляр сообщения с определенным штампом, ID, в переменную«вывод» выглядит следующим образом:

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

1 Ответ

2 голосов
/ 31 марта 2012

Это означает, что fetchone() возвращает None, что означает, что ваш запрос SQL не возвращает никаких строк результата.

Это, вероятно, потому, что вы должны использовать = вместо isв вашем SQL:

SELECT messages FROM Status WHERE stamp = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...