S2Dao風にデータベースにアクセスする
仕事で使う場合は生SQL書けないといやん><
動かしてないけどideaメモ
pythonだとSQLを__doc__に書けるので楽。
djangoじゃなくても__doc__はいろいろに使えるなあ。
import types class Dao(object): def __init__(self, prefix="raw"): for k, v in self.__class__.__dict__.items(): if type(v) == types.FunctionType: if v.__name__[:len(prefix)] == prefix: sql = v.__doc__.strip() def _dao_method(): from django.db import connection cursor = connection.cursor() """ まだ適当 SQLのパラメータをごにょる """ #cursor.execute(sql, [self.baz]) row = cursor.fetchone() return row self.__dict__[k] = _dao_method class TestDao(Dao): """ SQLをdocに書きなぐる """ def raw_sql_get_data(self): """ SELECT * FROM TEST """ a = TestDao() a.raw_sql_get_data()
あるメソッド名のメソッドにSQLをdocに書く。
Daoを継承した時点でデータベースアクセスへ可能に。
- prefixに一致したメソッドを拾う
- メソッドの__doc__をSQLとして拾う
- データベースアクセスメソッドで上書きする。
pythonだとサクッと作れるねえ。やっぱ楽だのお。
うくく。