如何比较SQLAlchemy中的版本号?(给定一个函数这样做)



我有这个函数来比较版本号:

def version_gt(left, right):
    """
    Compare two version numbers telling which is greater    
    Returns True if left is greater, False if right is greater.
    """
    left = map(int, filter(None, str(left).split('.')))
    right = map(int, filter(None, str(right).split('.')))
    for i in range(max([len(left), len(right)])):
        if i > len(left)-1:
            # left ran out of version numbers, therefore right is greater
            return False
        elif i > len(right)-1:
            # right ran out of version numbers therefore left is greater
            return True
        else:
            # compare versions only if the version number is different
            if left[i] != right[i]:
                return left[i] > right[i]
    return False # if all is equal, return False since left is not greater

我如何在SQLAlchemy中使用它来比较select语句中的版本号?

我看不懂在线文档。谢谢你的帮助。-Sunjay03

[EDIT]我是这样定义这些列的:

Table("updates", metadata,
    Column("u_id", Integer, primary_key=True),
    Column("appname", String, nullable=False),
    Column("version", String, nullable=False),
    Column("uploaded", DateTime, default=func.now()),
)

答案与此有关:http://www.sqlalchemy.org/docs/orm/mapper_config.html custom-comparators

我不是很懂,也许你可以。

即使在原始SQL中,sqlite数据库引擎的表达能力也不足以对单个列进行这种比较。最好的选择是将version列拆分为几个列,或者简单地接受一个简单的字符串比较(类似于updates1.version > updates2.version的效果)。如果这些都不是一个选项,您将需要扩展sqlite引擎(通过sqlite_create_function())与您需要的功能。

相关内容

最新更新