python - 转换 MySQL 查询以在 web2py DAL 中使用

标签 python mysql data-access-layer web2py

在一个测试(非 web2py)程序中,我正在使用调用 SELECT SUBSTRING_INDEX 的 MySQL 查询。将其转换为 web2py 的 DAL 规范中的正确用法的最简单方法是什么?

查询如下:

http://pastie.textmate.org/3848916

SELECT SUBSTRING_INDEX( ipaddress, '.', 3 ) AS first_three_octet, count( * ) AS ipCount, updated
            FROM ips
            GROUP BY SUBSTRING_INDEX( ipaddress, '.', 3 )
            HAVING ipCount = 254 
            ORDER BY ipCount DESC 

仅供引用 - 我同时将这段代码拼凑在一起以完成我所需要的:

def ListFullRanges():
    import re
    f3o = '(\d{1,3}\.\d{1,3}\.\d{1,3})'
    fullrange = []

    rg1 = re.compile(f3o,re.IGNORECASE|re.DOTALL)
    for row in db(db.ips).select():
        m = rg1.findall(row.ipaddress)
        if not m[0] in fullrange:
            if db(db.ips.ipaddress.startswith(m[0])).count() == 254:
                fullrange.append(m[0])
    print fullrange

    return dict(fr=fullrange)

最佳答案

有时会有非常复杂的查询,比如专门为单个数据库引擎创建的查询。虽然这不是“完美”的解决方案,但您可以使用已经为 MySQL 构建的查询:

db.executesql(
        "SELECT SUBSTRING_INDEX( ipaddress, '.', 3 ) AS first_three_octet, count( * ) AS ipCount, updated
        FROM ips
        GROUP BY SUBSTRING_INDEX( ipaddress, '.', 3 )
        HAVING ipCount = 254 
        ORDER BY ipCount DESC", as_dict=True
)

这将返回一个字典列表,这与使用 DAL 查询得到的结果类似。使用executesql 也更快。唯一的缺点是它可能只能与 MySQL 一起使用,并且不能与 SQLFORM 一起使用。但如果您只打算使用 MySQL,那么这可能是最好的解决方案。

关于python - 转换 MySQL 查询以在 web2py DAL 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416388/

相关文章:

python - 实现自定义哈希方法

multiple-regression - scikit_learn 回归总结

python - 从 http ://ip. zscaler.com/获取公共(public) IP 和其他基于文本的信息

boto 过滤器中的 Python 比较运算符

php - 关于在 php 中上传 csv 文件不清楚

c# - 权限表

c# - MySql 参数化存储过程在 C# 中不起作用

c# - Dispose() 如何知道它是因为异常而被调用的?

design-patterns - UnitOfWork 是否等于事务?或者它不止于此?

c# - 如何将 Count(*) 与 DAL2 一起使用?