我有这个函数来比较版本号:
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()
)与您需要的功能。