2017年5月7日日曜日

SQlite3のダンプファイルをMySQLにリストアする

SQlite3のデータベースをMySQLへ移行しようと思ったが、単純にSQlite3のダンプファイルをMySQLにリストアするというのではダメらしい。そこで方法を探してみると、Quick easy way to migrate SQLite3 to MySQL?にSQlite3のダンプファイルをMySQL用に変換するPythonスクリプトがあった。

そのスクリプトでSQlite3のダンプファイルを変換する。まずは、スクリプトをsqlite_to_mysql.pyというファイルに保存し、以下のようなコマンドでSQlite3のダンプをスクリプトで変換する。変換した結果はdump.sqlというファイルに保存する。


続いてMySQLへのリストア。まずはMySQLにデータベースを作成。


そして変換したファイルをMySQLにリストアする。


しかし以下のようなエラーが発生してしまう。


スクリプトで変換したファイルを見てみると、CREATE TABLE直後のINSERT文の文字列がシングルクォーテーション(')でなくバッククォート(`)で囲まれている。これはスクリプトが掲載されている掲示板でも指摘されていて、その修正がされていないようだ。


スクリプトを調べてみると、正規表現でのマッチがうまく機能しておらず、searching_for_endがFalseになるはずのところでなっていない。CREATE TABLEの行を処理するときに前のDROP文と結合されlineが2行なるからだ。
    if searching_for_end and re.match(r'.*\);', line):
        searching_for_end = False

そこで以下のように変更。
    if searching_for_end and re.match(r'.*\);', line, flags=(re.MULTILINE | re.DOTALL)):
        searching_for_end = False

改めてSQlite3からダンプしてMySQLにリストアすると、エラーは発生しなかった。

0 件のコメント:

コメントを投稿