【问题标题】:Select data based on datestamp with sqlite3 query使用 sqlite3 查询根据日期戳选择数据
【发布时间】:2018-06-08 20:19:31
【问题描述】:

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

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 

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

【问题讨论】:

    标签: database python-3.x sqlite


    【解决方案1】:

    代替

    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)
    

    解决了问题!

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多