2012-03-31 2 views
0

私はプログラミングの初心者です.SQLiteとPythonの学習に少し助けてください。PythonとSQLiteでは、データベースから変数に項目を読み込むにはどうすればよいですか?

現在、私は2つの列を含む "Status.db"と呼ばれるデータベースを持っています。これらの列は「スタンプ」、INT型、「メッセージ」で、TEXTを連続して入力します。

私は次のように「出力」は変数に、特定のスタンプで、メッセージの1つのインスタンスを読み取ろうとするために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 

このエラーが何を意味するのか、誰かが私にそれを動作させるために行うことができるのかどうかは誰にでも分かりますか?

ありがとうございます!

EDIT: ここで作成され、fetchone()があなたのSQLクエリが任意の結果行を返すされていないことを意味し、Noneを返していることを意味データベース

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

答えて

2

に書き込むコードがあります。

あなたはSQLで=代わりのisを使用する必要がありますので、これはおそらくです:でもそれを固定した後、私はまだ同じエラーメッセージが出ていますが、私のためにそれを指摘して

SELECT messages FROM Status WHERE stamp = ? 
+0

感謝を。 – Synia

+1

@Synia、データベースにデータがありますか? (もしあなたがデータを持っていれば、データベースにある 'ID'で' comment'を呼び出していますか?) – huon

+1

@dbauppこんにちは、ありがとうございます。データベースにチェックが入っていて、何らかの理由でデータベースに割り当てられたスタンプが小数点以下6桁で、渡されたスタンプが2個しかないことに気付きました。私はすべて整数に変更しました。 – Synia

関連する問題