首页
学习
活动
专区
圈层
工具
发布

与INTERVAL
EN

Stack Overflow用户
提问于 2021-02-09 17:28:37
回答 2查看 157关注 0票数 1

我尝试了各种各样的东西,重写了部分,改变了行等。

就像搜索一样,我找不到类似的东西。我很确定这就是我尝试使用variable来实现datestamp value的方式。

对不起,我知道这只是语法错误,但我解决不了。就在一周前,我刚刚开始使用SQL,到目前为止,这个问题已经困扰了我两天。

在这一行中,我要做的是在我的db中搜索,lines与被搜索的人在同一时间或间隔1小时。

语法错误行(68):

代码语言:javascript
复制
 c.execute('''SELECT COUNT (*)
             FROM covidTrack
             WHERE datestamp >= ?, interval 1 hour''', (z,))

完整代码:

代码语言:javascript
复制
import sqlite3
import datetime
import time

conn = sqlite3.connect('covid.db')
c = conn.cursor()

def enter_data():
    def create_table():
        c.execute('''CREATE TABLE IF NOT EXISTS
        covidTrack(
        name TEXT,
        email TEXT,
        ph_number INTEGER,
        datestamp TEXT,
        keyword TEXT)''')


    i_name = input('Please insert FULL NAME : \n ...')
    i_email = input('Please insert EMAIL : \n ...')
    i_number = input('Please insert PHONE NUMBER : \n ...')

    print('Your data has been saved for acelerated contact, thank you.')

    time.sleep(3)


    def data_entry():
        date, keyword = dynamic_data_entry()
        c.execute('INSERT INTO covidTrack VALUES(?, ?, ?, ?, ?)', (i_name, i_email, i_number, date, keyword))
        conn.commit()


    def dynamic_data_entry():
        keyword = 'nameofvenue'
        date = str(datetime.datetime.fromtimestamp(time.time()).strftime('%m-%d-%Y %H:%M:%p'))
        return date, keyword
        conn.commit()

    def read_from_db():
        c.execute('''SELECT * FROM covidTrack''')
        conn.commit()

    create_table()
    data_entry()
    read_from_db()

def data_search():
    x = input('''Select desired search: \n
    Search by FULL NAME. \n
    Search by DATE AND TIME \n
    Search by phone number \n
    ~ ~ ~''')

    if x.lower() == 'full name':
         specify_name = input('Please insert full name. \n ')
         select_query = c.execute('''SELECT * FROM covidTrack WHERE NAME ==(?) ''', (specify_name,))
         information = c.fetchall()
         for row in information:
             print('\nName:', row[0])
             print('Email:', row[1])
             print('Phone Number:', row[2])
             print('Date and Time:', row[3])
             print('Venue:', row[4])
             print('\n')
             z = row[3]

             c.execute('''SELECT COUNT (*)
             FROM covidTrack
             WHERE datestamp >= ?, interval 1 hour''', (z,))

             general_information = c.fetchall()
             print('Matching Results: \n ')
             for rows in general_information:
                 print(rows[0:4])

    if x.lower() == 'date and time':
        print('Not finished.')

    if x.lower() == 'phone number':
        print('not finished.')

choose_funtion = input('''Please choose action: \n
A TO ENTER DATA. \n
B TO SEARCH DATA. \n ''')

if choose_funtion.lower() == 'a':
    print('You choose enter data.')
    enter_data()
if choose_funtion.lower() == 'b':
    print('You choose search data.')
    data_search()

c.close()
conn.close()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-09 21:21:16

语法错误是由,WHERE datestamp >= ?之后引起的,但是即使您删除了它,您仍然会得到一个错误,因为SQLite不支持interval值。

正确的语法是:

代码语言:javascript
复制
WHERE datestamp >= ? AND datestamp <= datetime(?, '+1 hours')

它还可能在列datestamp上使用索引。

所以你的代码应该是:

代码语言:javascript
复制
c.execute('''SELECT COUNT (*)
             FROM covidTrack
             WHERE datestamp >= ? AND datestamp <= datetime(?, '+1 hours')''', (z, z))

但是,您应该知道,像SQLite这样的datetime()函数只使用YYYY-MM-DD hh:mm:ss格式的时间戳。

因此,对于存储在datestamp中的值和传递给?占位符的参数z,您应该使用这种格式:

代码语言:javascript
复制
date = str(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))

此外,如果希望datestamp存储当前时间戳,那么在表的CREATE语句中为其定义默认值会更容易:

代码语言:javascript
复制
c.execute('''CREATE TABLE IF NOT EXISTS
covidTrack(
name TEXT,
email TEXT,
ph_number INTEGER,
datestamp TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
keyword TEXT)''')

这样,在插入新行时,不需要为datestamp传递任何值。

票数 1
EN

Stack Overflow用户

发布于 2021-02-09 17:42:07

我不认为sqlite支持interval。您可以使用以下内容:

代码语言:javascript
复制
 WHERE ? BETWEEN datetime(datestamp,'-1 hours') AND datetime(datestamp,'+1 hours')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66123954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档