前提・実現したいこと
MySQLサーバでSELECT文を実行し、
結果をSQLiteにINSERTしたいです。
その際、自動でCREATE TABLEを実行してほしいです。
(CREATE TABLE時、多少型が違ってしまうのは我慢します)
いい方法が見つからず、納得いっていない
色々調べたのですが、
MySQLをSQLiteに保存するスマートな方法が見つからず、
- SQLAlchemyでengineを作成し、
- Pandasのread_sqlで読み込んで、
- Pandasのwrite_sql(?)でSQLiteに書き込むという方法は見つかりました。
該当のソースコード
python
1from sqlalchemy import create_engine 2import pandas as pd 3 4CONFIG = {"host": "192.168.x.x", "port": 3306, "user": "hoge_user", "passwd": "piyo_oass", "db": "db", "charset": "utf8"} 5SQL = "SELECT + FROM table WHERE id in (1, 2, 3);" 6 7# MySQL SELECT 8engine = create_engine('mysql://{user}:{passwd}@{host}:{port}/{db}'.format(**CONFIG), echo=False) 9df = pd.read_sql(sql=SQL, con=engine, index_col=None) 10 11# SQLite CREATE TABLE and INSERT 12engine = create_engine('sqlite:///db.sqlite3', echo=False) 13df.to_sql('table', engine, if_exists='append', index=None)
もっと良い方法はないでしょうか
Pandasを使っている点が少し納得がいかないのですが、
SQLAlchemyだけで完結できないのでしょうか。
あるいはもっと短く書く方法はありますか?
よろしくお願いいたします。
あなたの回答
tips
プレビュー