我有一条sql语句,当我在sqlite3中输入它时,它运行时没有错误,但是如果我通过我的python脚本运行它,它无法将floor识别为一个函数。
我有一个数据集,其中包含unix时间(时期)、写入次数,并且我希望捕获不同时间间隔内写入的总和。(10米、20米、1小时、2小时等)。在这个例子中,我使用了30m样本(1800秒)。下面是我运行sqlite3.exe时的工作SELECT语句和输出
sqlite> SELECT "123456789" as ArraySN,
...> strftime('%Y-%m-%d %H:%M:%S', datetime(tsecs, 'unixepoch')) as "Date Time",
...> floor(tsecs/1800) * 1800 as "epoch",
...> 'W' as "R/W", sum(wsize5) as "16k"
...> FROM statvlun GROUP BY "Array SN", "epoch"
...> ORDER BY "epoch";123456789|2021-03-03 05:20:00|1614747600|W|14410640.0
123456789|2021-03-03 05:30:00|1614749400|W|43205476.0
123456789|2021-03-03 06:00:00|1614751200|W|43193768.0
123456789|2021-03-03 06:30:00|1614753000|W|42348397.0
123456789|2021-03-03 07:00:00|1614754800|W|43197724.0
123456789|2021-03-03 07:30:00|1614756600|W|43196195.0
123456789|2021-03-03 08:00:00|1614758400|W|28802535.0但是,如果我尝试从python运行相同的查询,它会报告floor函数无法识别。我寻找特殊字符,尝试使用单引号、双引号、三引号,并将其封装在整个floor语句中,然后尝试pandas vs sqlite3模块。下面是我正在运行的示例代码:
def main():
sql = """
SELECT "123456789" as ArraySN,
strftime('%Y-%m-%d %H:%M:%S', datetime(tsecs, 'unixepoch')) as \"Date Time\",
floor(tsecs/1800) * 1800 as "epoch",
'W' as "R/W", sum(wsize5) as "16k"
FROM statvlun GROUP BY "Array SN", "epoch"
ORDER BY \"epoch\";
"""
print(sql)
primdb_file = "testdb.db"
primdb_cnxn = sqlite3.connect(primdb_file)
cur = primdb_cnxn.cursor()
cur.execute(sql)
results = cur.fetchall()
print(results)我得到了sqlite3.OperationalError: no such function: floor
以下是测试脚本的完整输出。我错过了什么?!?!
> python .\testsql.py
SELECT "123456789" as ArraySN,
strftime('%Y-%m-%d %H:%M:%S', datetime(tsecs, 'unixepoch')) as "Date Time",
floor(tsecs/1800) * 1800 as "epoch",
'W' as "R/W", sum(wsize5) as "16k"
FROM statvlun GROUP BY "Array SN", "epoch"
ORDER BY "epoch";
Traceback (most recent call last):
File ".\testsql.py", line 34, in <module>
main()
File ".\testsql.py", line 29, in main
cur.execute(sql)
sqlite3.OperationalError: no such function: floor发布于 2021-04-16 03:39:36
包含数学函数是一个编译时选项。Python构建的DLL不包括它们。您可以通过强制转换为整数CAST(tsecs/1800 AS INTEGER)来获得相同的结果。
https://stackoverflow.com/questions/67114741
复制相似问题