3
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DB(MySQL)から、さらっとデータを取得したい

Last updated at Posted at 2019-07-23

pythonスクリプトを起動するだけで、DBからデータを取得できるようにしたい。それも簡単に

最近仕事の終わりに広告活動の一環で会社のTwitterに投稿する業務?をしている。私が主にやるのは定型文のツイートだが、そこに載せるデータは毎日変わるため毎回データを手動で参照してツイートを作って投稿してきた。

いや、Botにしろよ・・・。という指摘はもっともだが、やったことないしプロジェクト3つくらい走ってるし、ぶっちゃけコードを書く時間が取れない。

DB周りの接続の仕方さえわかればこっちのものなのでお家で勉強がてら調査してみることにした。

とりあえず、第一段階として、自動で文を生成するようにしたい。そのためにはDBから最新のデータを取得したい。

環境

  • MacOS Mojave
  • python 3.7.3
  • mysql-connector-python 8.0.16

mysql-connector-python のインストール

今回は難しいことせずに、さらっとDBから値を取得するのが目的なので簡単そうだった、mysql-connector-pythonを使う。

$ pip install mysql-connector-python

上記ではpipでインストールしたが、私はPyCharmを使っているので

Preferences > Project:yourappname > Project Interpreter > (左下の+ボタン)

から上記packageを検索してinstallして使っている。

ソースコード

test.py
import mysql.connector


def main():
    connection = mysql.connector.connect(
        host='0.0.0.0', # 接続先
        port='3306',
        user='username', # mysqlのuser
        password='password', # mysqlのpassword
        database='databasename', 
        use_pure=True,
    )

    # コネクションが切れたときに再接続してくれるように設定
    connection.ping(reconnect=True)

    # 接続できているかの確認
    print(connection.is_connected())

    cur = connection.cursor()

    cur.execute("SELECT * from test_table")

    # 全てのデータを取得
    rows = cur.fetchall()

    for row in rows:
        print(row)

    # DB操作が終わったらコネクションを閉じる
    cur.close()
    connection.close()


if __name__ == '__main__':
    main()

結果

テスト用に作ったDBから値を取得できていることが確認できた

$ python test.py
(1, '山田太郎', None, None)
(2, '山本太郎', None, None)

ここまでできれば、自動化もすぐできそう。

参考

3
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?