"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 이번 주에 배운 것 #0

이번 주에 배운 것 #0

2024-07-29에 게시됨
검색:830

What I

나는 적어도 내 개인적인 경험의 관점에서 볼 때 매주 하나 이상의 새로운 것을 배우고 있습니다. 그래서 여기에서 공유하는 것이 지식의 일부를 확고히 하고, 기록을 유지하며, 잠재적으로 다른 사람이 이전에 알지 못했던 것을 배울 수 있도록 돕는 좋은 방법이 될 것이라고 생각했습니다.

이번 주에 저는 데이터베이스 백업 이름 목록을 가져오고, 데이터베이스를 MySQL로 가져온 다음, Flask 컨텍스트를 시작하고, 그대로 데이터베이스에 대한 보고서를 실행할 수 있는 Python 스크립트를 작성하는 것이 가능하다는 것을 배웠습니다. 그런 다음 헹구고 반복하세요.

단순한 개념처럼 들릴 수도 있지만, 대부분 표준적인 접근 방식을 사용하여 이를 달성하려는 시도는 믿을 수 없을 정도로 어려웠습니다. 저는 백업을 가져오는 스크립트를 작성하는 것으로 시작한 다음 가져온 데이터에 대한 보고서를 실행하고 이를 루프에 넣었습니다. 하지만 안타깝게도 두 번째 루프 반복에 매달린 터미널을 만났고, 무슨 일이 일어날지 분석하기 시작했습니다.

가장 먼저 떠오른 생각은 Flask 앱에서 가져오는 작업으로 인해 스크립트가 아직 종료되지 않았기 때문에 가져오기가 차단되어 Flask와의 데이터베이스 연결을 유지하는 잠금이 여전히 활성 상태라는 것이었습니다. , 그러나 이런 일이 발생했음을 알려주는 오류 메시지는 없었고 의도적으로 설계된 것이라고 가정하므로 Flask에 대한 경험을 바탕으로 이것이 그럴 가능성이 가장 높다고 합리화했습니다.

그래서 저는 Flask에서 가져온 모듈을 간단히 '가져오기 취소'하는 방법을 검색하다가 작업을 완료하기 위해 Python에서 del 키워드를 발견하고 다시 시도했습니다. 이전에 내가 앉았던 동일한 교수형 터미널. 그래서 다시 초기 단계로 돌아갔습니다.

다음으로 생각한 것은 모듈이 제거되었지만 Flask 앱 컨텍스트가 여전히 어딘가에서 실행되고 있다는 것입니다. Flask 앱 컨텍스트를 내가 원하는 곳에서 실행하고 중지하도록 강제하기 위해 약 2년 전 이전 작업에서 사용했던 접근 방식을 시도했습니다. 여기서는 Flask 앱 컨텍스트를 사용하여 이메일을 비동기식으로 보내야 했습니다.

그런 다음 for 루프 내에서 앱을 가져온 다음 with app.app_context(): 명령을 사용하여 Flask가 지정된 컨텍스트 내에서만 시작 및 중지되도록 강제했습니다. 그런 다음 스크립트를 실행하고 첫 번째 루프에서 데이터베이스를 가져오는 데 몇 분 정도 기다리면서 숨을 죽이고 터미널을 관찰한 다음 이전과 마찬가지로 두 번째 루프부터 시작하여 성공했습니다! 두 번째 가져오기가 작동했고 보고서가 완료되었음을 나타내는 예상되는 다음 단계 출력을 얻었으며 이를 출력 파일과 비교하여 확인했습니다.

이전에는 해본 적이 없었던 결과에 만족했고, 결과를 파악하고 예상대로 작동하게 할 수 있어서 기뻤습니다.

처음에 내가 왜 이런 일을 하려고 했는지 궁금하실 수도 있는데, 좋은 질문이네요. 데이터베이스 백업 이외의 다른 곳에 저장되지 않았고 현재 라이브 데이터베이스에서 수집할 수 없는 데이터가 필요한 과거 월간 보고서를 가져오는 임무를 맡았기 때문에 이 데이터를 가져오는 데 사용할 수 있는 백업만 있었습니다. . 이것이 제가 데이터베이스 가져오기와 함께 Flask 컨텍스트를 관리하는 방법을 배우게 된 이유입니다.

약간의 코드 읽기를 즐기는 사람들을 위해 스크립트를 다음과 같이 구성했습니다.

import os # for running the database import command

backup_name_list = [
    "backup1",
    "backup2"
]

for backup_name in backup_name_list:
    # do all necessary changes or checks on the db name here
    command = f"mysql -u db_user_name --password='SomePassword' db_name 



이것이 바로 데이터베이스 백업에서만 기록 데이터를 가져올 수 있었던 방법입니다.

이 내용은 매우 구체적이며 저는 이 내용이 튜토리얼이 아니며 순전히 개인적인 학습 경험을 위한 출구라는 점을 알고 있습니다. 이 내용이 흥미로운 읽기 또는 유용한 정보가 되기를 바라면서 여기에서 공유하고 싶습니다. 어딘가에 있는 누군가에게 유용한 팁을 제공합니다.

여기까지 읽어주셔서 감사하다는 말씀을 전하고 싶고, 다음 포스팅에도 함께 해주시기를 바라겠습니다.

릴리스 선언문 이 글은 https://dev.to/kyledev008/what-ive-learned-this-week-0-57ek?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3