【问题标题】:Filter timestamp from sql database and extract as a list in python从sql数据库中过滤时间戳并在python中提取为列表
【发布时间】:2022-01-08 21:50:31
【问题描述】:

我有一个来自红色节点的 sql 数据库。数据库表包含一个带有 javascript date.now() 时间戳的列,例如1641154320892。表格的另一列包含温度值。我想选择特定时间段的温度值。

我尝试了以下代码:

import sqlite3
conn = sqlite3.connect('/home/ktm/Developing/test/home_automation.db')
print ("Opened database successfully")
conn.row_factory = lambda cursor, row: row[0]
c = conn.cursor()
ids = c.execute('SELECT Buero_temp FROM home_automation WHERE Zeitstempel BETWEEN '2022-01-05' AND '2022-01-07';').fetchall()
for i in ids:
    print (i)

不幸的是,我收到“SyntaxError: invalid syntax”

我做错了什么?

【问题讨论】:

  • 你能添加准确的Traceback
  • 文件“/home/ktm/Developing/sql_operations.py”,第 13 行 ids = c.execute('SELECT Buero_temp FROM home_automation WHERE Zeitstempel BETWEEN '2022-01-05' AND '2022-01 -07';').fetchall() ^ SyntaxError: invalid syntax
  • 单引号内不能有单引号'。请改用双引号。
  • c.execute("SELECT Buero_temp FROM home_automation WHERE Zeitstempel BETWEEN '2022-01-05' AND '2022-01-07';")
  • 您的 ID 将为空。这是因为,您的数据在epoch 中,而您的查询在字符串中。

标签: javascript python sql timestamp


【解决方案1】:

首先是语法错误。

Python 中的字符串既可以使用单引号也可以使用双引号。如果要在字符串中使用单引号,则外部字符串必须用双引号封装。

例如:

my_string = "My string has 'single quotes'"

现在开始您的查询:

根据您的问题,存储在 DB 中的数据采用时间戳的形式,例如:1641154320892。 Javascript 使用 13 位时间戳。

所以你应该使用时间戳进行查询。

import sqlite3

def str_date_to_epoch(s):
    print(s)
    return int(datetime.strptime(s, '%Y-%m-%d').timestamp() * 1000)


conn = sqlite3.connect('/home/ktm/Developing/test/home_automation.db')

print("Opened database successfully")
conn.row_factory = lambda cursor, row: row[0]
c = conn.cursor()
statement = f"SELECT Buero_temp FROM home_automation WHERE Zeitstempel BETWEEN {str_date_to_epoch('2022-01-05')} AND {str_date_to_epoch('2022-01-07')};"
ids = c.execute(statement).fetchall()

for i in ids:
    print(i)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多