"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > SQLite를 MySQL로 마이그레이션합니다.

SQLite를 MySQL로 마이그레이션합니다.

2024-11-08에 게시됨
검색:993

저는 제 자신을 소개합니다. 저는 Alfredo Riveros이고 몇 년간 프로그래밍에 대해 배워왔습니다. 현재 고등 상업 학교인 Río Tercero에서 소프트웨어 개발 고등 기술자를 공부하고 있습니다. 아래에서는 제가 도전 과제에 대해 설명하겠습니다. 발생했습니다.

제목에서 알 수 있듯이 제 목표는 SQLite 데이터베이스를 MySQL로 마이그레이션하는 것이었습니다. 이는 제가 수강하고 있는 데이터베이스 과목의 과제에서 비롯되었습니다.

내가 선택한 데이터베이스는 SQL Murder Mystery 게임에 속합니다. SQL 스킬을 재미있게 가르치기 위해 제작된 이 게임은 해당 링크에서 개발자가 제공하는 데이터베이스를 다운로드할 수 있습니다.

저는 이 데이터베이스가 그 자체로 게임이지만 데이터베이스와 관련된 개념을 가르치고 학습하는 데 귀중한 리소스를 구성한다는 점에서 교육적 지향 때문에 이 데이터베이스를 선택했습니다.

이 과제의 첫 번째 단계는 SQLite용 DB 브라우저를 사용하여 MySQL Workbench와 호환되는 형식으로 데이터베이스를 내보낼 수 있는지 조사하는 것이었습니다. DB 브라우저에서 SQL 스크립트를 생성했지만 이를 Workbench로 가져오면 대용량 파일을 관리하는 복잡성 외에도 특히 구문 및 데이터 무결성과 같은 많은 문제가 발생했습니다.

Migrar de SQLite a MySQL.

Migrar de SQLite a MySQL.

이 파일을 연구하고 구문 문제를 해결하려고 노력했으며 마침내 다른 접근 방식을 찾아야 한다는 결론에 도달했습니다.

다음 단계는 sqlite3 함수를 사용하여 터미널(Linux)을 통해 SQL 스크립트를 내보내는 것이었습니다.

Migrar de SQLite a MySQL.

이번에 스크립트의 구문이 많이 개선되었지만 그럼에도 불구하고 큰 문제는 항상 하나 또는 또 다른 새로운 문제가 나타났다는 것입니다.

두 가지 접근 방식이 모두 소진된 상태에서 잠시 시간을 내어 다른 대안을 반영하고 평가했습니다. 저는 Python이 SQLite와 MySQL을 모두 지원하므로 이 마이그레이션에 효과적인 도구가 될 수 있다고 생각하고 프로세스를 자동화하는 알고리즘을 설계하기 시작했습니다.

그래서 해당 주제에 대한 정보를 찾아보면서 먼저 그것이 가능한 접근 방식인지 확인하고, 목표를 달성할 수 있는 알고리즘을 설계할 수 있도록 정보를 수집했습니다.

이제 목표를 달성할 수 있었던 새로운 접근 방식에 대해 간략하게 설명하겠습니다.
제가 가장 먼저 한 일은 연구를 단계별로 문서화하는 것이었습니다. 이를 통해 객체 관계형 매핑(ORM)

이라는 것을 배우게 되었습니다.

객체 관계형 매핑(ORM)은 객체 지향 프로그래밍 언어에서 호환되지 않는 유형 시스템 간에 데이터를 변환하기 위해 프로그래밍에 사용되는 기술입니다. 데이터베이스의 맥락에서 ORM을 사용하면 SQL 쿼리를 직접 사용하는 대신 개체를 통해 관계형 데이터베이스와 상호 작용할 수 있습니다. 이는 보다 직관적이고 효율적인 데이터 작업 방법을 제공합니다.

저의 경우 SQLAlchemy를 사용하여 Python으로 알고리즘 개발을 진행하였고, 결과를 분석한 결과 다음과 같은 핵심 사항을 발견했습니다.

  • 테이블과 같은 클래스:
    • 정의하는 각 클래스(예: Crime_scene_report, drivers_license 등)는 데이터베이스의 테이블에 해당합니다. 클래스 속성은 테이블의 열을 나타냅니다.
  • 인스턴스를 행으로:
    • 클래스의 각 인스턴스는 해당 테이블의 행을 나타냅니다. SQLite에서 데이터를 쿼리하면 이러한 클래스의 인스턴스가 생성되므로 데이터 작업을 보다 직관적이고 객체 지향적으로 수행할 수 있습니다.
  • 삽입 및 업데이트 작업:
    • merge()와 같은 메서드를 사용하면 이러한 인스턴스에서 직접 작업할 수 있습니다. SQL 쿼리를 수동으로 작성하지 않고도 새 레코드를 삽입하거나 기존 레코드를 업데이트할 수 있으므로 코드가 단순화되고 가독성이 높아집니다.
  • 관계 관리:
    • SQLAlchemy는 클래스의 속성을 통해 테이블 ​​간의 관계(예: 외래 키를 통해)를 자동으로 처리하므로 관련 레코드 간을 더 쉽게 탐색할 수 있습니다.

Migrar de SQLite a MySQL.

다양한 시행착오를 거쳐 이 과정에서 주목해야 할 중요한 점은 문제가 발생할 수 있는 위치를 식별하는 데 도움이 되기 때문에 접근 방식을 이해하고 작성된 코드를 평가하는 것이 중요하다는 것입니다. 잠시 생각하고 잠시 멈춘 후에 문제가 데이터베이스 구조와 관련이 있을 수 있다는 결론에 도달했습니다. 그러나 한 가지 질문이 내 마음 속에 남아있었습니다. 무결성 문제와 나타나는 다양한 오류에도 불구하고 이 데이터베이스가 SQLite에서 작동하는 것이 어떻게 가능합니까? 대답은 간단합니다. MySQL과 달리 SQLite를 사용하면 기본 키가 없는 테이블을 가질 수 있으므로 두 시스템 간의 데이터 관리에 큰 차이가 발생합니다. SQLite의 이러한 유연성은 MySQL과 같이 보다 제한적인 환경에서 즉각적인 오류를 초래할 수 있는 문제를 가릴 수 있습니다.

또 다른 차이점은 MySQL이 데이터 구조와 유형에 대해 보다 엄격한 접근 방식을 가지고 있다는 것입니다. 예를 들어 필드를 INTEGER로 정의하면 숫자가 아닌 값을 삽입할 수 없습니다.

차이점은 계속됩니다. 이를 이해한 결과 작동 방식을 위해서는 데이터베이스에 변경이 있어야 한다는 것을 깨달았습니다. 이를 위해 테이블을 수정하고 테이블이 MySQL 표준을 준수하는지 확인하기로 결정했습니다. 첫 번째는 각각에 기본 키가 있고 둘 다 동일한 데이터 유형을 가지고 있는지 확인하는 것입니다.

추가합니다... 동일한 작업을 수행하려면 SQLite에서는 테이블을 직접 변경할 수 없다는 점을 명심하세요. 이는 MySQL과의 또 다른 큰 차이점입니다.

마지막으로 스크립트와 Python으로 작성된 알고리즘을 수정한 후 실행을 진행했습니다. 결과: 게임 데이터베이스가 MySQL로 마이그레이션되었습니다.

이 과제를 통해 기술적 능력이 향상되었을 뿐만 아니라 데이터베이스 관리 시스템 간의 차이점과 이것이 데이터베이스 무결성에 어떤 영향을 미칠 수 있는지 이해하는 것이 얼마나 중요한지 배웠습니다.

SQLite에서 MySQL로 데이터베이스를 마이그레이션한 경험이 도움이 되었고 영감을 주었기를 바랍니다. 각 도전 과제는 프로그래밍 세계에서 배우고 성장할 수 있는 기회를 제공합니다.
읽어주셔서 감사합니다. 다음 시간까지 기다려주세요!

릴리스 선언문 이 글은 https://dev.to/silvio_riveros_49b5505866/migrar-de-sqlite-a-mysql-217i?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

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

Copyright© 2022 湘ICP备2022001581号-3