이 글에서는 Python에서 정기적으로 데이터베이스를 수정하기 위한 샘플 코드를 주로 소개합니다. 편집자가 꽤 좋다고 생각해서 지금 공유하고 참고용으로 올려드리겠습니다. 편집기를 따라가며 데이터베이스를 정기적으로 수정해야 할 경우 일반적으로 데이터베이스를 수정하기 위해 예약된 프로세스를 시작하도록 선택합니다. 이런 예약된 작업을 비즈니스에 적고 인터페이스로 작성한다면 예약된 프로세스가 좀 부적절해 보이죠? 정기적으로 데이터베이스를 100번 수정해야 한다면 기존 방법은 100개의 프로세스를 시작하게 됩니다. 이 프로세스는 매우 가볍지만 여전히 불편합니다. 실제로 threading.Timer를 사용하여 해당 스레드를 생성하여 라이브러리 수정 작업을 수행할 수 있으며 아이디어는 비교적 간단합니다.
1. 데이터베이스 수정 작업이 수행되는 시간인 update_time을 전달하고, update_time과 현재 시간 사이의 빼기 방법을 사용하여 데이터베이스 수정 작업까지의 time_delay를 가져옵니다. 두 표준 시간 형식 문자열 간의 시간 차이를 찾으려면 datetime.datetime.strptime()을 사용하여 시간 형식을 지정할 수 있으며, 형식화된 시간을 직접 뺄 수 있으며 .seconds()를 실행하여 결과를 초로 변환할 수 있습니다.
2. 라이브러리 수정 작업을 update() 메서드로 캡슐화한 다음 threading.Timer에 의해 생성된 스레드에 업데이트 및 시간 차이를 전달합니다. 사용법은 threading.Timer(interval, function, args=[], kwargs= {}) 스레드 인스턴스를 생성하기 위해, 간격 실행을 지연시키는 시간이며 단위는 초이며 start()가 실행됩니다. 타이머는 비차단형이며 서로 영향을 주지 않고 여러 스레드를 생성할 수 있습니다. 코드는 다음과 같습니다#!/usr/bin/env python3 # -*- coding: utf-8 -*- from model import Table from handler.base_handler import BaseHandler from threading import Timer import datetime class TimeHandler(BaseHandler): def do_action(self): update_time = "2018-04-07 18:00:00" ads_id = "test_1" t_online = datetime.datetime.strptime(update_time, '%Y-%m-%d %H:%M:%S') now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') t_now = datetime.datetime.strptime(now, '%Y-%m-%d %H:%M:%S') time_delay = (t_online - t_now).seconds t1 = Timer(time_delay, self.update, (ads_id, )) t1.start() self.result = "success" return def update(self, ads_id): self.db.dsp.query(Table).filter(Table.ads_id == ads_id).update({Table.is_del: 0}) self.db.dsp.commit()
update_time을 프런트 엔드에서 전달한 매개변수로 변경하면 되며, 이때 데이터베이스 수정 작업을 수행할 수 있습니다. 이때 작은 함정에 빠졌는데, 마지막 줄의 commit()이 추가되지 않아 데이터베이스 수정 작업이 적용되지 않았다. 원래 라이브러리 변경 커밋은 기본 클래스인 BaseHandler에 작성되어 적용되지만 여기서 update()는 Timer 스레드에서 실행되는데, 이는 비동기 작업인 Commit()이 스레드에서 실행되어야 합니다. 변경사항이 적용됩니다.
Python
에서 파일 읽기 및 쓰기에 대한 자세한 설명
위 내용은 Database_python을 정기적으로 수정하기 위한 Python 샘플 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!