mysqlclientでdict型のデータを取得する方法
通常、selectをしたときはtupple型で取得されます。
少し使いづらいので、dict型で取得できるようにします。
connectを取得して、cursorにDictCursorを設定するだけです。
from MySQLdb.cursors import DictCursor self.connect = _mysql.connect( host=DATABASES['HOST'], user=DATABASES['USER'], password=DATABASES['PASSWORD'], database=DATABASES['NAME'], port=DATABASES['PORT'], ) # ↓ を設定すると、self.cursor.fetchone等を使ったときにdict型で取得できます。 self.cursor = self.connect.cursor(DictCursor)
mysqlclientの簡易utilの紹介
pythonを使ってmysqlに対してselectを実行したり、insert、update、deleteをしたいときがあります。
そんなときに使える簡易的なutilを紹介します。
必要なライブラリは↓です。
mysqlclient jinjasql
↓の簡易utilはjinjasqlを使用しています。
import MySQLdb as _mysql from MySQLdb.cursors import DictCursor from jinjasql import JinjaSql DATABASES = { 'NAME': 'Sample', 'USER': 'root', 'PASSWORD': 'admin', 'HOST': '127.0.0.1', 'PORT': 3306, } class MySqlUtil(object): source = '' data = None def __init__(self): pass def open(self): self.connect = _mysql.connect( host=DATABASES['HOST'], user=DATABASES['USER'], password=DATABASES['PASSWORD'], database=DATABASES['NAME'], port=DATABASES['PORT'], ) # ↓ を設定すると、self.cursor.fetchone等を使ったときにdict型で取得できます。 self.cursor = self.connect.cursor(DictCursor) def execute(self): if self.data is None: params = {} query = self.source else: query, params = self.create_query(self.source, self.data) self.open() self.cursor.execute(query, params) def select_all(self): datas = self.cursor.fetchall() return datas def select_one(self): data = self.cursor.fetchone() return data def close_cursor(self): self.cursor.close() def close_connect(self): self.connect.close() def close(self): self.close_cursor() self.close_connect() def create_query(self, source, datas): jsql = JinjaSql() query, params = jsql.prepare_query(source, datas) return query, params def rollback(self): self.connect.rollback() def commit(self): self.connect.commit()
使い方
MySqlUtil
を継承したModelクラスを用意します。
あとは、インスタンスを生成して、データをセットし、関数を実行するだけです。
class SampleModel(MySqlUtil): id = None def select_id(self): self.source = """ select 1 where id = {{id}} """ self.data = { 'id': self.id, } self.execute() return self.select_one() if __name__ == "__main__": sample = SampleModel() sample.id = 1 sample.select_id()