2015-12-02 122 views
-1

我想做一个python文件,连接到我的小型数据库,将检索温度和湿度取决于在html表单中设置的日期和时间。从python获取数据从sqlite

<script> 
    $(function() { 
    $("#dateValue").datepicker(); 
    }); 
    </script> 
    </head> 
    <body> 

    <form name="myForm" method="post" action="/cgi-bin/script1.py"> 
    <p>Date: <input type="text" name="dateValue" id="dateValue"></p> 
    <p>Time: <select name="timeValue" id="timeValue"> 
     <option value="0">--All Day--</option> 
     <option value="01">1am</option> 
     <option value="02">2am</option> 
     <option value="03">3am</option> 
     <option value="04">4am</option> 
     <option value="05">5am</option> 
     <option value="06">6am</option> 
     <option value="07">7am</option> 
     <option value="08">8am</option> 
     <option value="09">9am</option> 
     <option value="10">10am</option> 
     <option value="11">11am</option> 
     <option value="12">12am</option> 
     <option value="13">1pm</option> 
     <option value="14">2pm</option> 
     <option value="15">3pm</option> 
     <option value="16">4pm</option> 
     <option value="17">5pm</option> 
     <option value="18">6pm</option> 
     <option value="19">7pm</option> 
     <option value="20">8pm</option> 
     <option value="21">9pm</option> 
     <option value="22">10pm</option> 
     <option value="23">11pm</option> 
     <option value="24">12pm</option> 
    </select> 
     <input type="submit" value="Enter"/> 
    </form> 

所以一旦输入数据他们应该连接到一个数据库,其名称为readings.db并连接到的具有以下结构的表天气

ID dateReading timeReading 温度 湿度

如何连接到数据库仅检索窗体中选定日期和时间的温度和湿度。我如何做到这一点,如果他们选择了上午10点它选择所有的温度和湿度在上午10点,从上午10点到上午11点类型的东西。并且如果那时没有数据库中的日期或时间,则表示没有找到日期和时间的数据。

这是我的脚本到目前为止

#!/usr/bin/python 
import sqlite3 as lite 
import sys 
import cgi, cgitb 

form = cgi.FieldStorage() 

dateValue = form.getvalue('dateValue') 
timeValue = form.getvalue('timeValue') 

con = lite.connect('readings.db') 

with con: 
    cur = con.cursor() 
    cur.execute('SELECT temperature, humidity FROM weather WHERE dateReading = dataValue AND timeReading = timeValue') 

rows = cur.fetchall() 

for row in rows: 
    print row 

print "Content-type:text/html\r\n\r\n" 
print "<html>" 
print "<head>" 
print "<title>Hello - CGI Program</title>" 
print "</head>" 
print "<body>" 
print "<h2>received from the form %s %s</h2>" % (dateValue, timeValue) 
print "</body>" 
print "</html>" 

最后豆蔻位更是一个测试,以确保我是从根据您的意见形式

+0

它,而取决于如何将数据如何存储在数据库中,如果它在日期时间格式,你将不得不选择DATEVALUE转换成您可以使用它之前的相同类型。如果你为表'weather'显示数据库模式(结构)并且说datevalue是python datetime对象,或者至少告诉我们它是如何表示的,这可能会有所帮助。显然时间是一个数字字符串。 –

+0

数据库中的数据结构与表格 –

+0

收到的结构相同。在数据库中,'dateReading'定义为'datetime','int','text'等,并且'timeReading'定义为'int' ,“浮动”,“文字”?这很重要,因为你必须像like一样比较。对于输入数据,尝试输出'type(dateValue)'和'type(timeValue)'的值,它会告诉你它们是如何被接收的。一旦你知道了输入数据和数据库中的两个项目的数据类型,你就有机会实现你的目标。 –

回答

0

只要获取的数据作为输入文本与数据库中的文本对象具有相同的格式,那么日期就是它的内容。
你唯一的问题是时间。我建议你将inputTime转换为一个整数,然后将其加1并将其转换回一个字符串。

use_time = int(inputTime) 
finish_time = use_time + 1 
start_time = str(use_time) 
finish_time = str(finish_time) 

那么你的select语句应该是这样的:

cur.execute('SELECT temperature, humidity FROM weather WHERE dateReading = dateValue and timeReading >= start_time and timeReading < finish_time')