「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL から SQLite への移行。

MySQL から SQLite への移行。

2024 年 11 月 8 日に公開
ブラウズ:218

自己紹介します。私はアルフレッド リベロスです。数年間プログラミングについて学んでいます。現在、リオ テルセロの高等商業学校でソフトウェア開発の高等技術者を勉強しています。以下に私が取り組んだ課題について説明します。遭遇しました。

タイトルにあるように、私の目標は 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.

今回はスクリプトの構文が大幅に改善されましたが、それでも大きな問題は、常に何らかの新しい問題が発生することです。

両方のアプローチを使い尽くしたので、時間をかけて他の代替案を検討し、評価しました。私は、SQLite と MySQL の両方をサポートしている Python がこの移行に効果的なツールである可能性があると考え、プロセスを自動化するアルゴリズムの設計を開始しました。

そこで私はこのトピックに関する情報を探しました。まず、それが可能なアプローチであることを確認し、目標を達成できるアルゴリズムを設計できるように情報を収集しました。

次に、私が目標を達成するために使用した新しいアプローチについて簡単に説明します。
私が最初にやったことは、自分の研究を段階的に文書化することでした。これにより、オブジェクト リレーショナル マッピング (ORM) と呼ばれるものについて学びました。

オブジェクト リレーショナル マッピング (ORM) は、オブジェクト指向プログラミング言語で互換性のない型システム間でデータを変換するためにプログラミングで使用される手法です。データベースのコンテキストでは、ORM を使用すると、SQL クエリを直接使用するのではなく、オブジェクトを通じてリレーショナル データベースと対話できるようになります。これにより、より直観的かつ効率的にデータを操作できる方法が提供されます。

私の場合、SQLAlchemy を使用して Python でアルゴリズムの開発を実行しました。結果を分析すると、次の重要なポイントが見つかりました。

  • テーブルなどのクラス:
    • 定義した各クラス (crime_scene_report、drivers_license など) はデータベース内のテーブルに対応します。クラス属性はテーブルの列を表します。
  • 行としてのインスタンス:
    • クラスの各インスタンスは、対応するテーブル内の行を表します。 SQLite からデータをクエリすると、これらのクラスのインスタンスが取得されるため、データの操作がより直感的かつオブジェクト指向になります。
  • 挿入および更新操作:
    • merge() などのメソッドを使用すると、これらのインスタンスを直接操作できます。 SQL クエリを手動で作成しなくても、新しいレコードを挿入したり、既存のレコードを更新したりできるため、コードが簡素化され、読みやすくなります。
  • 人間関係の管理:
    • SQLAlchemy は、クラス内の属性を通じてテーブル間の関係 (外部キーなど) を自動的に処理し、関連するレコード間の移動を容易にします。

Migrar de SQLite a MySQL.

さまざまな試行錯誤を経たプロセス中に注意すべき重要な点は、問題が発生する可能性のある場所を特定するのに役立つため、アプローチを理解し、書かれたコードを評価することが重要であるということです。少し考えて立ち止まった後、問題はおそらくデータベース構造に関連しているという結論に達しました。しかし、私の頭の中に 1 つの疑問が残りました。整合性の問題やさまざまなエラーが発生しているにもかかわらず、このデータベースが SQLite でどのように動作するのでしょうか?答えは簡単です。MySQL とは異なり、SQLite では主キーのないテーブルを作成できるため、両方のシステム間のデータ管理に大きな違いが生じます。 SQLite のこの柔軟性により、MySQL のような制限の厳しい環境では即時にエラーが発生する可能性がある問題が隠蔽されます。

もう 1 つの違いは、MySQL はデータ構造と型に対してより厳密なアプローチを採用していることです。たとえば、フィールドを INTEGER として定義すると、数値ではない値を挿入できなくなります。

相違点は続いています。相違点を理解した結果、このアプローチを機能させるにはデータベースを変更する必要があることがわかりました。このため、テーブルを変更し、テーブルが MySQL 標準に準拠していることを確認することにしました。まず最初に、それぞれに主キーがあり、両方のデータ型が同じであることを確認します。

追加します...同じことをしたい場合は、SQLite ではテーブルを直接変更できないことに留意してください。これも MySQL との大きな違いです。

最後に、スクリプトと Python で書かれたアルゴリズムを調整して、実行に進みました。結果: ゲーム データベースは MySQL に移行されました。

この課題により、私の技術スキルが向上しただけでなく、データベース管理システムの違いと、それらがデータベースの整合性にどのような影響を与えるかを理解することの重要性も学びました。

SQLite から MySQL へデータベースを移行した私の経験が役に立ち、刺激になったことを願っています。それぞれの課題は、プログラミングの世界で学び、成長する機会を提供します。
読んでいただきありがとうございます。また次回まで!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/silvio_riveros_49b5505866/migrar-de-sqlite-a-mysql-217i?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>
  • Elasticsearchを学ぶ
    Elasticsearchを学ぶ
    Elasticsearch は、Apache Lucene ライブラリに基づいて構築された強力なオープンソースの検索および分析エンジンです。大量のデータを処理し、複雑な検索を効率的に実行できるように設計されています。 Elasticsearch の主な特徴と機能は次のとおりです: 分散アーキテクチャ...
    プログラミング 2024 年 11 月 8 日に公開
  • 配当率: Python ベースの財務プロジェクトの重要な指標
    配当率: Python ベースの財務プロジェクトの重要な指標
    配当率: Python ベースの財務プロジェクトの重要な指標 財務分析の分野では、配当は多くの投資家にとって非常に重要です。特に財務データの処理や投資戦略の自動化を行う Python プロジェクト を開発している場合、配当率の計算と分析が重要な要素となる可能性があります。配当率に関...
    プログラミング 2024 年 11 月 8 日に公開
  • 並列テストまたは分散テストを使用して複数のブラウザーで WebUI 機能ファイルを実行するにはどうすればよいですか?
    並列テストまたは分散テストを使用して複数のブラウザーで WebUI 機能ファイルを実行するにはどうすればよいですか?
    並列テストまたは分散テストを使用して複数のブラウザーで WebUI 機能ファイルを実行する並列テストを使用して複数のブラウザー (Zalenium) に対して WebUI 機能ファイルを実行するにはランナーまたは分散テストでは、次のアプローチを利用します:パラレル ランナーとシナリオ アウトライン:...
    プログラミング 2024 年 11 月 8 日に公開
  • SOAP と REST API: 主な違いを理解する
    SOAP と REST API: 主な違いを理解する
    Web サービスの世界では、SOAP (Simple Object Access Protocol) と REST (Representational State Transfer) の 2 つのアーキテクチャが広く使用されています (SOAP 対 REST API)。どちらもシステム間の通信プロ...
    プログラミング 2024 年 11 月 8 日に公開
  • CSSでテキストの下線の色をカスタマイズするにはどうすればよいですか?
    CSSでテキストの下線の色をカスタマイズするにはどうすればよいですか?
    CSS を使用したテキストの下線の色のカスタマイズWeb デザインでは、情報を強調または強調表示するためにテキストに下線を追加するのが一般的です。ただし、下線の色を変更して独特の雰囲気を加えたい場合はどうすればよいでしょうか。可能ですか?はい、CSS を使用してテキストの下の線の色を変更することがで...
    プログラミング 2024 年 11 月 8 日に公開
  • JavaScript でのクリックジャッキング防御技術の実装
    JavaScript でのクリックジャッキング防御技術の実装
    クリックジャッキングなどの高度な攻撃の出現により、今日のオンライン世界ではセキュリティが主要な問題となっています。攻撃者は、消費者をだまして最初に表示されているものとは異なるものをクリックさせることで、「クリックジャッキング」と呼ばれる悪質な手法を展開し、悲惨な結果をもたらす可能性があります。この種...
    プログラミング 2024 年 11 月 8 日に公開
  • フローティングされた Div が後続の Div のサイズを変更しないのはなぜですか?
    フローティングされた Div が後続の Div のサイズを変更しないのはなぜですか?
    Div のサイズが変更されない Float の謎CSS float を使用する場合、後続の要素は新しい要素に流れるのではなく左に揃えられると想定されます。ライン。ただし、提供されている例など、一部のシナリオでは、次の div が最初の div の右側から始まるのではなく、幅全体に広がり続けます。この...
    プログラミング 2024 年 11 月 8 日に公開
  • Python を使用して MySQL にデータをインポートする
    Python を使用して MySQL にデータをインポートする
    導入 データベースにデータを手動でインポートするのは、特に多数のテーブルがある場合、面倒なだけでなく時間がかかる場合があります。これは、Python ライブラリを使用すると簡単に行うことができます。 kaggle からペイント データセットをダウンロードします。絵画データ セットは...
    プログラミング 2024 年 11 月 8 日に公開
  • 必須の MySQL オペレーターとそのアプリケーション
    必須の MySQL オペレーターとそのアプリケーション
    MySQL 演算子は、開発者にとって重要なツールであり、正確なデータ操作と分析を可能にします。これらは、値の割り当て、データ比較、複雑なパターン マッチングなどのさまざまな機能をカバーします。 JSON データを処理する場合でも、条件に基づいてレコードをフィルタリングする場合でも、効率的なデータベー...
    プログラミング 2024 年 11 月 8 日に公開
  • Cron ジョブをテストする方法: 完全ガイド
    Cron ジョブをテストする方法: 完全ガイド
    Cron ジョブは、タスクのスケジュール設定、プロセスの自動化、および指定された間隔でのスクリプトの実行のために、多くのシステムで不可欠です。 Web サーバーの保守、バックアップの自動化、定期的なデータ インポートの実行など、cron ジョブにより操作がスムーズに実行されます。ただし、他の自動化...
    プログラミング 2024 年 11 月 8 日に公開
  • Next.js ミドルウェアの概要: 例を使用した仕組み
    Next.js ミドルウェアの概要: 例を使用した仕組み
    Nextjs のルーティングについて話しましょう。今日は、最も強力なミドルウェアの 1 つについて説明します。 Nextjs のミドルウェアは、サーバーからのリクエストをインターセプトし、リクエスト フロー (リダイレクト、URL 書き換え) を制御し、認証、ヘッダー、Cookie の永続性などの機...
    プログラミング 2024 年 11 月 8 日に公開
  • 小道具の基本: パート 1
    小道具の基本: パート 1
    これは、プロップの使用方法に関する初心者向けのチュートリアルです。読む前に、分割とは何か、コンポーネントの使用/作成方法を理解することが重要です。 Props (プロパティの略) を使用すると、親コンポーネントから子コンポーネントに情報を送信できます。また、任意のデータ型を使用できることに注意する...
    プログラミング 2024 年 11 月 8 日に公開
  • Hibernate は Spring Boot とどう違うのですか?
    Hibernate は Spring Boot とどう違うのですか?
    Hibernate は Spring Boot とどう違うのですか? Hibernate と Spring Boot は両方とも Java エコシステムで人気のあるフレームワークですが、異なる目的を果たし、異なる機能を備えています。 休止状態 Hibernate は...
    プログラミング 2024 年 11 月 8 日に公開
  • C++ は 10 進データ型をどのように処理できますか?
    C++ は 10 進データ型をどのように処理できますか?
    C の 10 進データ型 C では、数値を処理するためのさまざまなデータ型が提供されていますが、驚くべきことに、10 進データ型はネイティブではサポートされていません。これは、正確な 10 進数値を扱う場合、または 10 進形式を利用するシステムとインターフェイスする場合に制限となる可能性があります...
    プログラミング 2024 年 11 月 8 日に公開
  • Python の Caesar 暗号関数で最後にシフトされた文字だけが表示されるのはなぜですか?
    Python の Caesar 暗号関数で最後にシフトされた文字だけが表示されるのはなぜですか?
    Python の Caesar 暗号関数: 暗号化された文字列Python で Caesar Cipher 関数を実装する場合、最終的な暗号化されたテキストが暗号化されるという一般的な問題が発生します。最後にシフトされた文字のみを表示します。これを解決するには、この動作の原因となっている問題を理解す...
    プログラミング 2024 年 11 月 8 日に公開

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3