首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中运行时“没有这样的函数:地板”,但当我在sqlite3.exe中键入SELECT语句时,它运行时没有问题

在Python中运行时“没有这样的函数:地板”,但当我在sqlite3.exe中键入SELECT语句时,它运行时没有问题
EN

Stack Overflow用户
提问于 2021-04-16 03:13:01
回答 1查看 149关注 0票数 1

我有一条sql语句,当我在sqlite3中输入它时,它运行时没有错误,但是如果我通过我的python脚本运行它,它无法将floor识别为一个函数。

我有一个数据集,其中包含unix时间(时期)、写入次数,并且我希望捕获不同时间间隔内写入的总和。(10米、20米、1小时、2小时等)。在这个例子中,我使用了30m样本(1800秒)。下面是我运行sqlite3.exe时的工作SELECT语句和输出

代码语言:javascript
运行
复制
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";
代码语言:javascript
运行
复制
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模块。下面是我正在运行的示例代码:

代码语言:javascript
运行
复制
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

以下是测试脚本的完整输出。我错过了什么?!?!

代码语言:javascript
运行
复制
> 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
EN

Stack Overflow用户

发布于 2021-04-16 03:39:36

包含数学函数是一个编译时选项。Python构建的DLL不包括它们。您可以通过强制转换为整数CAST(tsecs/1800 AS INTEGER)来获得相同的结果。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67114741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档