>  기사  >  백엔드 개발  >  SQLite를 MySQL로 마이그레이션합니다.

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

DDD
DDD원래의
2024-11-03 18:23:02534검색

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

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

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

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

이 과제의 첫 번째 단계는 SQLite용 DB 브라우저를 사용하여 MySQL Workbench와 호환되는 형식으로 데이터베이스를 내보낼 수 있는지 조사하는 것이었습니다. DB Browser에서 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로 데이터베이스를 마이그레이션한 경험이 도움이 되었고 영감을 주었기를 바랍니다. 각 도전 과제는 프로그래밍 세계에서 배우고 성장할 수 있는 기회를 제공합니다.
읽어주셔서 감사합니다. 다음 번에도 읽어주세요!

위 내용은 SQLite를 MySQL로 마이그레이션합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.