LoginSignup
6
6

More than 5 years have passed since last update.

Python with MySQL

Last updated at Posted at 2016-03-23

MySQL-python

Django対応?
C-Extentionのみ

install

pip install MySQL-python
gcc要る
mysql-devel要る
コンパイル走る

demo

                slave_connection = MySQLdb.connect(host = slave_host, user = username, passwd = password, port = slave_port)
                slave_cursor = slave_connection.cursor(MySQLdb.cursors.DictCursor)
                slave_cursor.execute("SHOW SLAVE STATUS")
                slave_status = slave_cursor.fetchone()
                slave_master_log_file = slave_status["Master_Log_File"]
                seconds_behind_master = int(slave_status["Seconds_Behind_Master"])

cursorで DictCursor指定したら、row['<column>']で通るようになる。

mysql-connector-python

Mysql製
pure-python版も有る(普通にいれるとそれっぽい)むしろC-Extentionは後発
最新版はpipで入らない

install

no longer support mysql-connector-python!
use mysql-connector-python-rf
but ...

pip install mysql-connector-python-rf

Collecting mysql-connector-python-rf
  Downloading mysql-connector-python-rf-2.1.3.tar.gz (271kB)
    100% |████████████████████████████████| 274kB 1.4MB/s
Installing collected packages: mysql-connector-python-rf
  Running setup.py install for mysql-connector-python-rf ... error

    usage: -c [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
       or: -c --help [cmd1 cmd2 ...]
       or: -c --help-commands
       or: -c cmd --help

    error: option --single-version-externally-managed not recognized

    ----------------------------------------

solution

pip install --egg mysql-connector-python-rf

python3.6 (lambda)

pip install mysql-connector-python

demo

import mysql.connector
cnx = mysql.connector.connect(host='127.0.0.1', 
                              user='root', 
                              password='huga', 
                              port='3306', 
                              database='test')
cur = cnx.cursor(buffered=True, dictionary=True)
cur.execute('show slave status')
row = cur.fetchone()
row['Seconds_Behind_Master']
#row[cols.index('Seconds_Behind_Master')]

普通はrow['%Column_name%']でいい感じにして欲しいときは、cursor開くときに dictionary=true を指定する。
for .. in cur: 文で回すサンプルもあるが、配列(タプル)のインデックス順にだしてるだけ、select文でカラム絞りしてればいいけど。
connection.cmd_query()というのもあるけど、一発コマンドでconnection切れてしまう臭い。

6
6
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
6
6