使用sqlite3查询

时间:2018-06-08 10:44:51

标签: database python-3.x sqlite

我正在尝试使用sqlite3根据datestamp的值访问数据库中的数据。请考虑以下代码:

live_db_conn = sqlite3.connect('/Users/user/Documents/database.db')
time_period = (dt.now() - timedelta(seconds=time)).strftime('%H:%M:%S')
time_period_data = pd.read_sql_query('SELECT * FROM table1 WHERE Datestamp > {}'.format(str(time_period)), live_db_conn)

当我运行此代码时,我收到以下错误:

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT * FROM table1 WHERE Datestamp > 12:33:33': near ":33": syntax error

我不明白这个错误来自哪里,因为如果我运行以下代码:

df = pd.read_sql_query('SELECT Datestamp FROM table1 LIMIT 10', live_db_conn)
print(df) 

我得到以下输出:

Datestamp
0  10:46:54
1  10:46:59
2  10:47:04
3  10:47:09
4  10:47:14
5  10:47:19
6  10:47:24
7  10:47:29
8  10:47:34
9  10:47:39

所以看来(至少对我来说)我的sql查询是正确的。我试过.format(time_period)而不是.format(str(time_period)),但我无法弄清楚我做错了什么。

问题:如何选择与所选时间段对应的数据部分?

编辑:时间戳中的分钟似乎出现了问题。当我再次运行代码时,我得到了相同的错误,但是时间戳不同:

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT * FROM table1 WHERE Datestamp > 12:49:10': near ":49": syntax error 

所以我要说语法错误与时间戳中的分钟有关。

1 个答案:

答案 0 :(得分:0)

而不是

time_period_data = pd.read_sql_query('SELECT * FROM table1 WHERE Datestamp > {}'.format(str(time_period)), live_db_conn)

我做了:

time_period_data = pd.read_sql_query('SELECT * FROM table1 WHERE Datestamp > "{}"'.format(time_period), live_db_conn)

解决了这个问题!