gpt4 book ai didi

python - 如何在没有任何顺序的情况下更新我的数据库对象?

转载 作者:行者123 更新时间:2023-11-29 13:08:26 25 4
gpt4 key购买 nike

图片情况,我有个人日历的申请。里面有一个模型可以保存几天,仅在我的申请日可能是 48 小时长的东西。为了一切顺利,我的日子不能相互重叠——数据库中有排除约束。

所以我的问题是当我尝试将我的日历更新到新时区时,我的日子相互重叠。例如第一天从 01:00 到 23:00 3 月 15 日,第二天从 00:03 到 23:30 3 月 16 日,当我们切换时区 +-3h 时失败:

    def do_execute(self, cursor, statement, parameters, context=None):
> cursor.execute(statement, parameters)
E sqlalchemy.exc.IntegrityError: (psycopg2.errors.ExclusionViolation) conflicting key value violates exclusion constraint "days_timerange_user_id_excl"
E DETAIL: Key (timerange, user_id)=(["2014-03-15 22:45:00+00","2014-03-16 11:50:00+00"), 739) conflicts with existing key (timerange, user_id)=(["2014-03-16 04:00:00+00","2014-03-16 10:00:00+00"), 739).
E [SQL: 'UPDATE days SET timerange=%(timerange)s WHERE days.id = %(days_id)s'] [parameters: {'timerange': MutableDateTimeTZRange(datetime.datetime(2014, 3, 15, 12, 45, tzinfo=tzfile('/usr/share/zoneinfo/Pacific/Tahiti')), datetime.datetime(2014, 3, 16, 1, 50, tzinfo=tzfile('/usr/share/zoneinfo/Pacific/Tahiti')), '[)'), 'days_id': 858}] (Background on this error at: http://sqlalche.me/e/gkpj)

我这样做的功能是:

# Days
for i in user.days[::direction]:
i.timerange = change_tz_timerange(i.timerange, user.timezone, timezone)
self.request.dbsession.flush()

我试过切换方向,但当时区差异足够大时没关系。

change_tz_timerange 下你可以看到:

def change_tz_timerange(timerange, old_tz, new_tz):
return DateTimeTZRange(
replace_tz(timerange.lower, old_tz, new_tz),
replace_tz(timerange.upper, old_tz, new_tz),
'[)'
)

replace_tz:

def replace_tz(dt, old_timezone, new_timezone):
old_tz = pytz.timezone(old_timezone)
dt = dt.astimezone(old_tz)
dt = dt.replace(tzinfo=None)
return arrow.get(dt, new_timezone).datetime

有没有办法一次性全部更新?或者在更新过程中“删除”它们?谢谢。

最佳答案

解决方案可能只是更改要延迟的约束。然后它不作为语句的一部分进行检查,而是在事务结束之前检查。

ALTER TABLE days
ALTER CONSTRAINT days_timerange_user_id_excl
DEFERRABLE INITIALLY DEFERRED;

然后在验证约束时,表将再次保持一致。

关于python - 如何在没有任何顺序的情况下更新我的数据库对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58186142/

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