White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

MySQLとの連携

ようやくなんか理解した気が。

手順としてはconnect->execute->commitで実行、execute("SELECT なんたらかんたら")で結果取得って感じかなぁ。
こんなdbクラスファイルにしてるけど、要改良。

# - * - coding: utf-8 -*-

import MySQLdb

""" showyou db class
    特化せずにまずはビジネスロジック
"""
class TempDB:
	def connect(self,dbName,userName, passWd):
		# MySQLデータベースに接続
		self.con = MySQLdb.connect(db=dbName,user=userName,passwd=passWd)
		self.cur = self.con.cursor()
	def execute(self,str,args):
		print str + ";",
		print args
		self.cur.execute(str,args)
		self.con.commit()
	def select(self,str,args):
		self.execute("select "+str,args)
	#def fetch():	
		# 結果を取得して返す
		ret = [];
		r = self.cur.fetchone()
		while r != None:
			ret.append(r)
			print r
			r = self.cur.fetchone()
		return ret

	def close(self):	
		# カーソルを閉じる
		self.cur.close()
		self.con.close()

まずそもそもコンストラクタ、デストラクタ使えよ・・<自分

あとexecuteの引数に渡すとき、C言語のprintfのように%dとか%sとか指定するんだけど、これってあくまでDB側の型を指定するのね。python側のexecute関数の第三引数の型名にして怒られた・・(DBがVARCHARなのに数値だからって%d指定してた)

上のやつを使うとこんな感じ。

>>> import db
>>> database = db.TempDB()
>>> database.connect("database_name","username","password")
>>> database.execute("insert table_name set value = %s",123)
>>> a = database.select("id from table_name where value=%s",123)
(25L,)
(26L,)
>>> print a
[(25L,), (26L,)]
>>> b = a[0]
>>> print b[0]
25