sql >> データベース >  >> RDS >> Mysql

SQLite3をMySQLに移行する簡単な方法は?

    誰もがいくつかのgrepsとperl式から始めているようで、特定のデータセットで機能するものを取得しますが、データが正しくインポートされているかどうかはわかりません。誰も2つの間で変換できる堅実なライブラリを構築していないことに真剣に驚いています。

    ここに、2つのファイル形式の間で私が知っているSQL構文のすべての違いのリストがあります:で始まる行:

    • トランザクションの開始
    • コミット
    • sqlite_sequence
    • 一意のインデックスを作成する

    MySQLでは使用されません

    • SQLiteはCREATETABLE / INSERT INTO "table_name"を使用します MySQLはCREATETABLE / INSERT INTO table_nameを使用します
    • MySQLはスキーマ定義内で引用符を使用しません
    • MySQLは、 INSERT INTO内の文字列に一重引用符を使用します 条項
    • SQLiteとMySQLには、 INSERT INTO内の文字列をエスケープする方法が異なります。 条項
    • SQLiteは't'を使用します および'f' ブール値の場合、MySQLは 1を使用します および0 (このための単純な正規表現は、次のような文字列がある場合に失敗する可能性があります。 )
    • SQLLiteはAUTOINCREMENTを使用します 、MySQLは AUTO_INCREMENTを使用します

    これは、 myで機能する非常に基本的なハッキングされたperlスクリプトです。 データセットを作成し、Webで見つけた他のperlスクリプトよりも多くのこれらの条件をチェックします。 Nuは、データに対して機能することを保証しますが、自由に変更してここに投稿してください。

    #! /usr/bin/perl
    
    while ($line = <>){
        if (($line !~  /BEGIN TRANSACTION/) && ($line !~ /COMMIT/) && ($line !~ /sqlite_sequence/) && ($line !~ /CREATE UNIQUE INDEX/)){
            
            if ($line =~ /CREATE TABLE \"([a-z_]*)\"(.*)/i){
                $name = $1;
                $sub = $2;
                $sub =~ s/\"//g;
                $line = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n";
            }
            elsif ($line =~ /INSERT INTO \"([a-z_]*)\"(.*)/i){
                $line = "INSERT INTO $1$2\n";
                $line =~ s/\"/\\\"/g;
                $line =~ s/\"/\'/g;
            }else{
                $line =~ s/\'\'/\\\'/g;
            }
            $line =~ s/([^\\'])\'t\'(.)/$1THIS_IS_TRUE$2/g;
            $line =~ s/THIS_IS_TRUE/1/g;
            $line =~ s/([^\\'])\'f\'(.)/$1THIS_IS_FALSE$2/g;
            $line =~ s/THIS_IS_FALSE/0/g;
            $line =~ s/AUTOINCREMENT/AUTO_INCREMENT/g;
            print $line;
        }
    }
    


    1. mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/mysql_num_rowsなど...パラメーター1がリソースであることが必要です

    2. SQLトランザクションチュートリアル

    3. Flask、Connexion、SQLAlchemyを使用したPython REST API –パート3

    4. Access2016でAccessデータベースをSQLServerにリンクする方法