Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

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を継承した時点でデータベースアクセスへ可能に。

  1. prefixに一致したメソッドを拾う
  2. メソッドの__doc__をSQLとして拾う
  3. データベースアクセスメソッドで上書きする。

pythonだとサクッと作れるねえ。やっぱ楽だのお。
うくく。