gpt4 book ai didi

python - SQLite 的 peewee 中的 Order_By 自定义日期

转载 作者:行者123 更新时间:2023-12-04 08:21:15 25 4
gpt4 key购买 nike

我在建立数据库时犯了一个巨大的错误,但除了 1 个功能外,它工作得很好。在所有需要更改该功能才能工作的地方更改程序将是一项艰巨的工作,需要数周时间,所以我们希望这种解决方法是可行的。
问题:我已将数据存储在 SQLite 数据库中为“dd/mm/yyyy”TextField格式而不是 DateField .
需求:我需要在联合查询中按日期排序,以获得最后一个 number该联合中的记录遵循我的自定义日期格式。它们来自不同的表,所以我不能只使用 rowid 或类似的东西来获取最后一个,我需要按日期来做,我不能更改数据库中已经存储的数据,因为已经创建了发票使用该格式(“dd/mm/yyyy”是我所在国家/地区的默认日期格式)。
这是捕获数据的查询:

records = []
limited_to = 25
union = (facturas | contado | albaranes | presupuestos)
for record in (union
.select_from(union.c.idunica, union.c.fecha, union.c.codigo,
union.c.tipo, union.c.clienterazonsocial,
union.c.totalimporte, union.c.pagada,
union.c.contabilizar, union.c.concepto1,
union.c.cantidad1, union.c.precio1,
union.c.observaciones)
.order_by(union.c.fecha.desc()) # TODO this is what I need to change.
.limit(limited_to)
.tuples()):
records.append(record)
现在更复杂的是,联合已经由一个非常复杂的 where 创建了。每个数据库在转换为联合查询之前的子句。
所以我唯一的希望是:有没有办法让 order_by而是遵循自定义日期格式?
澄清一下,这是我需要的简单转换 order_by要遵循的子句,因为我认为如果这是日期格式,SQLite 不会有排序问题:
def reverse_date(date: str) -> str:
"""Reverse the date order from dd/mm/yyyy dates into yyyy-mm-dd"""
yyyy, mm, dd = date.split("/")
return f"{yyyy}-{mm}-{dd}"
注:我遗漏了很多代码,因为我认为这是不必要的。这是理解问题所需的最少代码量。如果您需要更多数据,请告诉我。
更新:尝试此解决方法,它似乎工作正常。需要更多测试,但很有希望。如果有人遇到过同样的问题,请看这里:
.order_by(sqlfunc.Substr(union.c.fecha, 7)
.concat('/')
.concat(sqlfunc.Substr(union.c.fecha, 4, 2))
.concat('/')
.concat(sqlfunc.Substr(union.c.fecha, 1, 2))
.desc())
2020年年底快乐!

最佳答案

正如您所指出的,如果您希望日期正确排序,则它们需要在 yyyy-mm-dd 中。格式,这是您应该始终在 SQLite 中使用的文本格式(或具有相同年、月、日、顺序的内容)。
您可以使用 re.sub 在这里重新排列:

.order_by(re.sub(r'(\d{2})/(\d{2})/(\d{4})', r'\3-\2-\1',
union.c.fecha))
在这里,我们使用正则表达式在不同的捕获组中捕获年、月和日组件。然后,我们按照正确的排序顺序替换这些组件。

关于python - SQLite 的 peewee 中的 Order_By 自定义日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65488494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com