Python3を使ってMySQLの複数のデータベースを操作してみた


エンジニアの福永です。

今回はPython3を使ってMySQLの複数のデータベースを操作してみます。

何やら難しそうな響きですが、Python歴2週間の私でも実装できるくらい簡単です!

 

1.今回やること

DB1のproductsというテーブルからデータを取得して、価格を2倍にしたのちに、DB2のhigh_quality_productsというテーブルにデータを格納します。


 

2.まずは準備

pip3 install mysqlclient

今回は「mysqlclient」というライブラリを使用するため、インストールしておきましょう。

 

3.DB1に接続する

import MySQLdb
connector1 = MySQLdb.connect(
        user=['ユーザー名'],
        passwd=['パスワード'],
        host='localhost',
        db=['DB1'])

まずは1つ目のDBに接続します。

MySQLdbをimportして、MySQLdb.connectで接続するDBの情報を記載してあげればOKです。

 

4.DB1からデータを取得

cursor1 = connector1.cursor()
cursor1.execute("""
SELECT
id,
name,
price
FROM
products
      """)
rows = cursor.fetchall()

次に接続したDB1からデータを取得します。
cursor.executeの中に通常と同じようにSQLを記述しましょう。
そして、cursor.fetchall()でSELECTしたデータを取得することができます。

 

5.取得したデータを加工してリストに格納

data = []
for row in rows
  name = row[1]
  # 価格を2倍にします。
  price = row[2] * 2
  l = (name, price)
  data.append(l)

取得したデータを加工します。
今回は価格を2倍に加工することにします。
そして、データをリストに格納します。
これでデータの準備はOKです。

 

6.DB2に接続する

connector2 = MySQLdb.connect(
        user=['ユーザー名'],
        passwd=['パスワード'],
        host='localhost',
        db=['DB2'])
cursor2 = connector2.cursor()

データの準備ができたので2つ目のDBに接続します。

 

7.DB2にデータを格納

cursor2.execute("""
INSERT INTO
high_quality_products (name, price)
VALUES (%s, %s)
  """, data)

#commitしないと保存されないので忘れずに。
connector2.commit()
connector2.close()

最後にcursor2.executeでINSERTのSQL文を書いてデータを格納します。

この時、データが格納されているリストのdataを引数として渡してあげることができます。
すると、%sが記載されている部分にリストに格納されているデータが順番に割り当てられます。

最後に注意しなければならないのが、必ずcommitしなければならないという点です。
これをしないと正しく実行されたようでも保存されないので注意しましょう。

 

まとめ

このとおり、Pythonを使えば簡単に複数のDBを操作することができます。
今回は価格を2倍にしてデータをINSERTするという単純なものでしたが、Python側で記述する内容を変えれば複雑な計算処理も行うことが可能です。
ぜひ皆さんも試してみてください。
 

さいごに

リンクバルではエンジニアを募集しております。
少しでも興味のある方はコチラからご応募をお願いします。