107
104

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.

Python3からMySQL繋ぐ時は、いろいろあるけどとりあえずPyMySQLにしとこうや

Last updated at Posted at 2018-04-29

どうもmiyachi(@_38ch)です
Flask+MySQLでアプリを作ろうとしてるんですが、Python3でMySQLに接続するためのパッケージがいろいろあって、どれがよくてどれが悪いのかよくわからない。
いろいろ使ってみようとした結果、PyMySQLが個人的に一番シンプルで使いやすかったので、使い方書いておきます。

「Python3 MySQL」で英語設定でググって一番最初に出てくる、stackoverflowで比較されていた中から選びました。そこでの紹介文を単純に翻訳すると

  • ピュアPython (Pure python)
  • mysql-connectorより速い (Faster than mysql-connector)
  • pymysql.install_as_MySQLdb()を呼び出せば、MySQLdbとほぼ完全な互換性がある (Almost completely compatible with MySQLdb, after calling pymysql.install_as_MySQLdb())

インストール

pip install PyMySQL

DB情報設定

import pymysql.cursors

conn = pymysql.connect(host='host_name',
                    user='user_name',
                    db='db_name',
                    charset='utf8mb4',
                    cursorclass=pymysql.cursors.DictCursor)

クエリを書いて情報を取得する

SELECT

try:
    with conn.cursor() as cursor:
        sql = "SELECT user_id, user_name FROM users WHERE user_id = %s"
        cursor.execute(sql, ('123',))
        result = cursor.fetchall()
        print(result)
finally:
    conn.close()

printの結果

{'user_id': 123, 'user_name': 'Jon Doe'}

INSERT

try:
    with conn.cursor() as cursor:
        sql = "INSERT INTO user (user_name, email) VALUES (%s, %s)"
        cursor.execute(sql, ('Jon Doe', 'sample@gmail.com'))

    # オートコミットじゃないので、明示的にコミットを書く必要がある
    conn.commit()
finally:
    conn.close()

シンプルで良い!

関連ページ

宣伝

プライベートでWalicaという複雑な割り勘のサポートサービスを作っているのでもしよかったら、使ってみてください。
Custom Preset.png

107
104
2

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
107
104

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?