我尝试了各种各样的东西,重写了部分,改变了行等。
就像搜索一样,我找不到类似的东西。我很确定这就是我尝试使用variable来实现datestamp value的方式。
对不起,我知道这只是语法错误,但我解决不了。就在一周前,我刚刚开始使用SQL,到目前为止,这个问题已经困扰了我两天。
在这一行中,我要做的是在我的db中搜索,lines与被搜索的人在同一时间或间隔1小时。
语法错误行(68):
c.execute('''SELECT COUNT (*)
FROM covidTrack
WHERE datestamp >= ?, interval 1 hour''', (z,))完整代码:
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()发布于 2021-02-09 21:21:16
语法错误是由,在WHERE datestamp >= ?之后引起的,但是即使您删除了它,您仍然会得到一个错误,因为SQLite不支持interval值。
正确的语法是:
WHERE datestamp >= ? AND datestamp <= datetime(?, '+1 hours')它还可能在列datestamp上使用索引。
所以你的代码应该是:
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,您应该使用这种格式:
date = str(datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'))此外,如果希望datestamp存储当前时间戳,那么在表的CREATE语句中为其定义默认值会更容易:
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传递任何值。
发布于 2021-02-09 17:42:07
我不认为sqlite支持interval。您可以使用以下内容:
WHERE ? BETWEEN datetime(datestamp,'-1 hours') AND datetime(datestamp,'+1 hours')https://stackoverflow.com/questions/66123954
复制相似问题