Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlite日期时间与unix时间戳的比较_Python_Sqlite_Datetime_Unix Timestamp - Fatal编程技术网

Python Sqlite日期时间与unix时间戳的比较

Python Sqlite日期时间与unix时间戳的比较,python,sqlite,datetime,unix-timestamp,Python,Sqlite,Datetime,Unix Timestamp,Sqlite文档: SQLite没有日期时间数据类型。相反,日期和时间可以通过以下任一方式存储: 作为ISO-8601格式的文本字符串。示例:“2018-04-02 12:13:46”。 作为自1970年以来的整数秒数,也称为unix时间。 ... 因此,我决定使用整数unix时间戳: import sqlite3, time conn = sqlite3.connect(':memory:') conn.execute("CREATE TABLE data(datetime INTE

Sqlite文档:

SQLite没有日期时间数据类型。相反,日期和时间可以通过以下任一方式存储:

作为ISO-8601格式的文本字符串。示例:“2018-04-02 12:13:46”。 作为自1970年以来的整数秒数,也称为unix时间。 ... 因此,我决定使用整数unix时间戳:

import sqlite3, time
conn = sqlite3.connect(':memory:')
conn.execute("CREATE TABLE data(datetime INTEGER, t TEXT);")
conn.execute("INSERT INTO data VALUES (CURRENT_TIMESTAMP, 'hello')")
为什么下面的查询不返回结果

ts = int(time.time()) + 31*24*3600  # unix timestamp 1 month in the future
print(list(conn.execute("SELECT * FROM data WHERE datetime <= ?", (ts, ))))
更一般地说,如何使用Sqlite进行SELECT查询,并与unix时间戳进行比较

附言:

我已经阅读了和类似的问题,这些问题提供了其他比较方法,但在这里我想确切地讨论一下为什么unix时间戳比较不起作用

出于性能原因,我想:

执行一个比较整数的查询,如果有很多行,这个查询速度会非常快:其中datetime插入新行时使用当前的\u时间戳。 这意味着在您的列中,值不会存储为unix时间戳,因为CURRENT_TIMESTAMP以YYYY-MM-DD hh:MM:ss格式返回当前日期

您可以使用函数datetime和unixepoch修饰符将unix时间戳转换为YYYY-MM-DD hh:MM:ss格式的datetime:

conn.execute("SELECT * FROM data WHERE datetime <= datetime(?, 'unixepoch')", (ts, ))
如果要在列中存储整数值,请按如下方式使用strftime:

INSERT INTO data VALUES (strftime('%s', CURRENT_TIMESTAMP) + 0, 'hello')

我不知道这是否有帮助,但当我使用unix时间(以毫秒为单位)时,作为int,它会产生溢出,long更好。@mama Sqlite使用unix时间戳(以毫秒或秒为单位)吗?python使用秒作为默认值。idk关于sqlite,但通常默认为milliseconds@DinoCoderSaurus为什么?插入带有当前时间戳的行。所以用datetime@DinoCoderSaurus IIRC查询时,它还包含HH:MM:SS,可能还有毫秒?你有这方面的消息来源吗?谢谢@forpas。出于性能方面的原因,我想做一个比较整数的查询,如果有很多行,它会非常快:其中datetime CURRENT\u TIMESTAMP以YYYY-MM-DD hh:MM:ss的格式返回当前日期。哦,这可能是原因,您是否有用于此的源/链接,以供将来参考?另外,我如何将当前时间戳作为unix timetamp而不是字符串获取?@Basj查看我编辑的答案。谢谢@forpas!为什么+0?strftime返回字符串,+0隐式转换为整数。
conn.execute("SELECT * FROM data WHERE strftime('%s', datetime) + 0 <= ?", (ts, ))
INSERT INTO data VALUES (strftime('%s', CURRENT_TIMESTAMP) + 0, 'hello')