python で database クラスを作ってみる (Part 4)

今回はテーブルのデータの更新と削除をやります。

データを更新するため、SimpleDB クラスに update 関数を定義します。
引数には table: テーブル名、更新データを辞書型、conditions: 条件を渡します。
関数内では、引数を基にして “UPDATE table SET field = value, …” という SQL 文を組み立てます。
UPDATE が成功すると、影響のあった行数を返し、失敗した場合は、None を返します。

    def update(self, table, data, conditions):
        sql = "UPDATE %s" % table
        bind = []

        if data is not None and len(data) > 0:
            # Build fields
            delim = ""
            sql += " SET "
            for field, value in data.iteritems():
                sql += "%s `%s` = " % (delim, field)
                sql += "%s"
                bind.append(value)
                delim = ","

        if conditions is not None and len(conditions) > 0:
            sql += " WHERE "
            delim = ""

            for field, value in conditions.iteritems():
                if value is None:
                    sql += "%s `%s` IS NULL" % (delim, field)
                else:
                    sql += "%s `%s` = " % (delim, field)
                    sql += "%s"
                    bind.append(value)
                delim = " AND"

        if self.__cursor is not None:
            self.__cursor.execute(sql, bind)
            self.__connection.commit()
            # Return rows affected.
            return self.__cursor.rowcount
        return None
    ## End def update

次に、このテーブルからデータを削除するため、delete 関数を定義します。
引数には table: テーブル名、conditions: 条件を指定する辞書型を渡します。
関数内では、引数を基にして “DELETE FROM table WHERE filed = value AND …” という SQL 文を組み立てます。
DELETE が成功すると、影響のあった行数を返し、失敗した場合は、None を返します。

    def delete(self, table, conditions):
        result = None
        sql = "DELETE FROM %s" % table
        bind = []

        if conditions is not None and len(conditions) > 0:
            sql += " WHERE "
            delim = ""

            for field, value in conditions.iteritems():
                if value is None:
                    sql += "%s `%s` IS NULL" % (delim, field)
                else:
                    sql += "%s `%s` = " % (delim, field)
                    sql += "%s"
                    bind.append(value)
                delim = " AND"

        if self.__cursor is not None:
            self.__cursor.execute(sql, bind)
            self.__connection.commit()
            # Return rows affected.
            return self.__cursor.rowcount
        return None
    ## End def delete
## End class

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください