2011-06-19 13 views
5

मैं यहाँ http://webpy.org/docs/0.3/tutorial ट्यूटोरियल पीछा कर रहा था तो कैसे SQLite साथ कार्यसूची भाग का उपयोग करने पता लगाने के लिए जाले चारों ओर देखा और इस http://kzar.co.uk/blog/view/web.py-tutorial-sqliteweb.py कार्य करने SQLite पूर्णांक के लिए अमान्य शाब्दिक का उपयोग कर सूची()

पाया मैं नहीं कर सकता इस त्रुटि को पारित करें। मैंने खोज की है और नतीजों में से कोई भी मुझे बहुत मदद नहीं कर सकता है। अधिकांश कोष्ठक से उद्धरण लेने का सुझाव दे रहे हैं।

त्रुटि

<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

कहीं भी int() को '19 02:39:09' तर्क के साथ बुलाया जा रहा है। 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

इससे वास्तव में मदद मिली। मैं नहीं जानता कि मैं वास्तव में इस मामले में प्रतिस्थापन() का उपयोग कैसे करूंगा, लेकिन अब मुझे पता है कि मुद्दों का कारण क्या था, मैंने प्रतिस्थापित किया कि किस समय स्टाम्प स्क्लाइट का उपयोग किया जा रहा था। 'अब' से '% j' तक। बीमार को आपके समाधान का उपयोग करके इसे ठीक करने का सही तरीका जानने के लिए और अधिक समय देना है, लेकिन यह अभी काम करता है। धन्यवाद! – Richard

+0

आपका स्वागत है। :) और वास्तव में कोई "सही" तरीका नहीं है, मैं केवल एक सुझाव दे रहा था अगर आप खुद को नहीं सोच सकते थे। आप जो भी तरीका आपके लिए सबसे अच्छा काम करते हैं, उसका उपयोग करने के लिए स्वतंत्र हैं। – John

1

सिर्फ टाइमस्टैम्प करने के लिए 'बनाया' कॉलम के प्रकार बदलने के लिए:

दिनांक स्वरूप है "YYYY-MM-DD"

टाइमस्टैम्प - "YYYY-MM-DD HH: MM: SS"

इस एसक्यूएल को ठीक काम करना चाहिए:

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; 
संबंधित मुद्दे