2013-03-28 1 views
0

자정 이후에> 24 시간으로 대중 교통 서비스를 정의하는 도시에 대한 일반 대중 교통 정보 사양 데이터베이스가 있습니다. 따라서 stop_times 테이블에서 우리는 25:00:00, 26:00:00, 등등.이 데이터베이스의 일부에서 시간 빼기를 수행해야하기 때문에 이것을 처리하고 python create_function sqlite 명령을 사용하는 사용자 정의 파이썬 스크립트를 작성한다고 생각했습니다. 그것을 내 데이터베이스와 연관시킨다. 나는이 데이터 집합에 생각하고있는 쿼리를 실행할 때 몇 가지 이유를 들어 자정 이후에 Sqlite 시간 빼기를위한 Python 스크립트

는, 나는

sqlite3.OperationalError: user-defined function raised exception 

가 여기에 내가 자정 이후 시간을 처리하기 위해 쓴 시간 뺄셈 함수의 수. 나는 그것이 엉망이라고 확신한다. 이 문제를보다 효율적으로 처리하는 방법에 대한 조언이 있으면 그 내용도 듣고 싶습니다. 미리 감사드립니다.

def time_delta(t1, t2): 
old_arrival = t1.encode('utf-8').split(':') 
old_departure = t2.encode('utf-8').split(':') 

new_arrival_string = "2013-03-16 %s:%s:%s" % (int(old_arrival[0])-12, old_arrival[1], old_arrival[2]) 
new_arrival_format = "%Y-%m-%d %H:%M:%S" 
arr = datetime.datetime.strptime(new_arrival_string, new_arrival_format) 

new_departure_string = "2013-03-16 %s:%s:%s" % (int(old_departure[0])-12, old_departure[1], old_departure[2]) 
new_departure_format = "%Y-%m-%d %H:%M:%S" 
dep = datetime.datetime.strptime(new_departure_string, new_departure_format) 

difference = arr-dep 
seconds = difference.seconds 

if difference.days < 0: 
    difference = dep-arr 
    seconds = (-1) * difference.seconds 

return seconds 
+0

함수에 예외를 기록하십시오. –

+0

해당 기능 내에서 [try/except] (http://docs.python.org/tutorial/errors.html)를 사용하십시오. –

+0

sqlite가이 함수를 실행하는 동안 어떻게 이것을 할 수 있습니까? SQL에서 나오는 unsubtracted 결과를 반복하고 함수를 직접 호출하면 sys.excepthook을 통해 캐치되지 않은 예외가 기록되지 않습니다. SQL이 SQL 문을 실행하는 동안 어떻게 기록 할 수 있습니까? –

답변

0

데이터베이스 스키마를 변경할 수 있습니까? 그렇다면이 문제를 피할 수있는 한 가지 방법은 도착 시간과 출발 시간을 문자열로 저장하지 않고 자정 이후 초 단위의 정수로 저장하는 것입니다 (물론 정오에서 정오 12 시가됩니다). stop_times.txt에 사용 된 "HH : MM : SS"형식에서 변환 할 데이터베이스를로드하는 데 사용합니다.

24 시간 제한으로 제한되지 않는 중지 시간을 정교하게 표현할 수있을뿐만 아니라 시간 간격을 계산하고 특정 기간의 중지 시간에 대한 데이터베이스 쿼리를 간단하게 작성할 수 있습니다. .

관련 문제