2011-06-19 19 views
5

が、私はその後、ここにhttp://webpy.org/docs/0.3/tutorialチュートリアルを次のsqliteでToDoリストの一部を使用する方法を見つけるためにウェブを中心に見て、このhttp://kzar.co.uk/blog/view/web.py-tutorial-sqliteweb.pyのToDoリストは、()

を見つけた私はできませんこのエラーを受け取りました。私は検索して、私が見つけ出すことができない結果がどれもあまりにも助けてくれません。大部分は、カッコから引用符を取り除くことを提案しています。

エラー

<type 'exceptions.ValueError'> at/
invalid literal for int() with base 10: '19 02:39:09' 

code.py

import web 

render = web.template.render('templates/') 

db = web.database(dbn='sqlite', db='testdb') 

urls = (
    '/', 'index' 
) 

app = web.application(urls, globals()) 

class index: 
    def GET(self): 
     todos = db.select('todo') 
     return render.index(todos) 

if __name__ == "__main__": app.run() 

テンプレート/ index.htmlを

$def with (todos) 
<ul> 
$for todo in todos: 
    <li id="t$todo.id">$todo.title</li> 
</ul> 

がtestbd

CREATE TABLE todo (id integer primary key, title text, created date, done boolean default 'f'); 
CREATE TRIGGER insert_todo_created after insert on todo 
begin 
update todo set created = datetime('now') 
where rowid = new.rowid; 
end; 

非常に新しいweb.py sqlite

答えて

3

どこかで、'19 02:39:09'という引数でint()が呼び出されています。 int()は、コロンまたはスペースを処理できません。

>>> int('19 02:39:09') 
Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    int('19 02:39:09') 
ValueError: invalid literal for int() with base 10: '19 02:39:09' 

>>> int(':') 
Traceback (most recent call last): 
    File "<pyshell#1>", line 1, in <module> 
    int(':') 
ValueError: invalid literal for int() with base 10: ':' 

>>> int('19 02 39 09') 
Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    int('19 02 39 09') 
ValueError: invalid literal for int() with base 10: '19 02 39 09' 

>>> int('19023909') 
19023909 
>>> 

私はこのようなスペースとコロンを取り除くためにreplace()を呼び出すことをお勧め:

>>> date='19 02:39:09' 
>>> date=date.replace(" ","") 
>>> date 
'1902:39:09' 
>>> date=date.replace(":","") 
>>> date 
'19023909' 
>>> int(date) ## It works now! 
19023909 
>>> 

・ホープ、このことができます。

+0

これは本当に助けになりました。私は実際にこのケースでreplace()をどのように使うのか分かりませんが、今は問題の原因を知っているので、sqliteが使用していたタイムスタンプを置き換えました。 'now'から '%j'に変更します。あなたのソリューションを使って、それを修正するための正しい方法を見つけ出すために、もっと時間をかけなければなりませんが、これは今のところうまくいきました。ありがとうございました! – Richard

+0

ようこそ。 :)実際には「正しい」方法はありません。あなたが自分自身について考えることができない場合、私は単に示唆を提供していました。どの方法が最適かは自由です。 – John

1

だけタイムスタンプに 'を作成' 列の種類を変更します。

日付形式は "YYYY-MM-DD"

タイムスタンプである - "YYYY-MM-DD HH:MM:SS"

このSQLは正常に動作するはずです:

CREATE TABLE todo (id integer primary key, title text, created timestamp, done boolean default 'f'); 
CREATE TRIGGER insert_todo_created after insert on todo 
begin 
update todo set created = datetime('now', 'localtime') 
where rowid = new.rowid; 
end; 
関連する問題