90924


djanogoのマイグレーション機能を、pythonのコードから実施する方法を教えていただけないでしょうか。

コマンドライン(shell)からは、以下の方法でできることが分かりました。

[code]

    python3 manage.py makemigrations [djangoのアプリ名称]
    python3 manage.py migrate
    
[/code]

* * *

以下、いただいたコメントを元に、追加情報を記します。

ありがとうございます。まずサブプロセス試してみます。

ありがとうございます。XY問題に陥っています。  
最終的に何がしたいかあいまいでした。  
やりたいことは、「sqlite3のデータをmysqlへ移行(コピー)したい」でした。  
移行後、実験のために、sqlite3、mysqlを一緒に利用できるようにしようとしています。

そのために、以下の手順を考えました。

  1. mysqlのインストール  
dockerでmysqlコンテナを実行する。  
→shellを実行する

  2. mysqlのデータベース、ユーザーの作成  
mysqlへ、データベースやユーザーを作成する。  
→shellもしくはpythonでsqlを実行する

  3. mysqlのテーブルの作成  
sqlite3と同じ構造のテーブルを作成する。  
→shellもしくはpythonでsqlを実行する。  
もしくはdjangoのマイグレーション機能を利用する。

  4. データのコピー  
sqlite3からデータを読み、mysqlへ書き込む。  
→djangoのモデルを利用して、pythonを実行する。  
もしくはレコードをコピーするsqlを書くこともできそうですね。

手順3は、djangoのマイグレーション機能を利用しようと思いました。  
その場合、python内部に記載されているデータベースへの接続先を変更する必要があるのが手間に感じました。  
だったら、マイグレーション処理をpythonで実行して、  
手順2、手順3、手順4の処理をまとめてpythonで用意しようと思い、質問しました。

よきアドバイスいただけると、ありがたいです。


CC BY-SA 4.0
2022-09-03T07:46:47.937
90908
2022-09-07T12:56:24.070
2022-09-04T12:20:58.100
35267
35267
question
python python3 django
Djangoのマイグレーション機能をPythonのコードから実施したい


実際にやろうとしているのは「SQLite3 から MySQL への移行」であるなら、Google 等では  
"SQLite3 to MySQL" などで検索するとよいと思います。

一例として以下の記事がヒットします。

[SQLite3からMySQLへDBをマイグレーションする方法](https://zenn.dev/m_kawaguchi/articles/00fd650010edb0)

移行用の pip モジュール [sqlite3-to-mysql](https://pypi.org/project/sqlite3-to-mysql/)
が配布されているようなので、そちらを使った方法です。

> SQLite3のdump
[code]

>     sqlite3 sqlite.db .dump > sqlite3.dump
>  
[/code]

>
> SQLite3のdumpをMySQLで扱える形に変換＆インポート
[code]

>     pip install sqlite3-to-mysql
>     sqlite3mysql -f ./sqlite3.dump -u MYSQL_DB_USERNAME -h
> MYSQL_DB_HOST_NAME -p
>  
[/code]

大抵の RDB はデータのエクスポート・インポートに対応しているかと思うので、別の RDB
にインポートする場合には適切な形式に変換を入れてあげるという考え方だと思います。


CC BY-SA 4.0
2022-09-04T13:42:24.163
90924
2022-09-04T13:42:24.163
3060
90908
answer


「SQLite3のdumpをMySQLで扱える形に変換＆インポート」することで、望み通りの結果が得られました。

mysqlのインストール+起動(dockerのインストールは省略)

[code]

    docker pull mysql
    docker run -dit --name test-mysql -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 mysql
    
[/code]

sqlite3からmysqlへ移行

[code]

    pip3 install sqlite3-to-mysql
    sqlite3mysql -f ./db.sqlite3 -u root -h localhost -d データベース名 -p
    
[/code]

db.sqlite3は、sqlite3のデータファイルです。  
データベース名は、任意の名前を指定する必要あります。

ありがとうございました。


CC BY-SA 4.0
2022-09-07T12:56:24.070
90987
2022-09-07T12:56:24.070
35267
90908
answer